5

我有一个查询,我需要检查大约 20 个不同的列以获取 0 值。

而不是这样做:

WHERE BOOK <> 0 或 ALLO <> 0 或 ...

有没有更快的方法呢?类似于:WHERE (BOOK,ALLO,...) <> 0

4

3 回答 3

5

虽然它不能在其他任何地方运行(MySQL、SQL-Server、Postgres)并且它可能不是 SQL 标准,但它可以在 Oracle 中运行:

WHERE 0 <> ANY (BOOK, ALLO, ...)

SQL-Fiddle中测试


还有另一种标准方法,适用于 MySQL 和 Postgres,但不适用于 Oracle:

WHERE (0, 0, ...) <> (BOOK, ALLO, ...) 

另一种适用于 Postgres 和 SQL-Server 2012 的标准方式(使用表值构造函数):

WHERE 0 <> ANY (VALUES (BOOK), (ALLO), ...)
于 2013-02-25T00:37:53.657 回答
1

你可以使用:

WHERE (book + allo + ...) > 0
于 2013-02-25T00:30:21.083 回答
1

如果不可能有负值,您可以这样做:

WHERE BOOK + ALLO + ... > 0

如果可能有负值,这是我能想到的最简洁的表达方式:

WHERE ABS(BOOK) + ABS(ALLO) + ... > 0

此外,这与数据库无关。

这些解决方案只有在不可能有​​空值的情况下才有效,如果是的话,它会变得非常混乱。

于 2013-02-25T00:37:53.597 回答