我有一个查询,我需要检查大约 20 个不同的列以获取 0 值。
而不是这样做:
WHERE BOOK <> 0 或 ALLO <> 0 或 ...
有没有更快的方法呢?类似于:WHERE (BOOK,ALLO,...) <> 0
虽然它不能在其他任何地方运行(MySQL、SQL-Server、Postgres)并且它可能不是 SQL 标准,但它可以在 Oracle 中运行:
WHERE 0 <> ANY (BOOK, ALLO, ...)
还有另一种标准方法,适用于 MySQL 和 Postgres,但不适用于 Oracle:
WHERE (0, 0, ...) <> (BOOK, ALLO, ...)
另一种适用于 Postgres 和 SQL-Server 2012 的标准方式(使用表值构造函数):
WHERE 0 <> ANY (VALUES (BOOK), (ALLO), ...)
你可以使用:
WHERE (book + allo + ...) > 0
如果不可能有负值,您可以这样做:
WHERE BOOK + ALLO + ... > 0
如果可能有负值,这是我能想到的最简洁的表达方式:
WHERE ABS(BOOK) + ABS(ALLO) + ... > 0
此外,这与数据库无关。
这些解决方案只有在不可能有空值的情况下才有效,如果是的话,它会变得非常混乱。