約20の異なる列で0の値をチェックする必要があるクエリがあります。
行うのではなく:
WHERE BOOK<>0またはALLO<>0または..。
それを行うより速い方法はありますか?次のようなもの:WHERE(BOOK、ALLO、...)<> 0
他の場所(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), ...)
あなたが使用することができます:
WHERE (book + allo + ...) > 0
負の値が不可能な場合は、次のようにすることができます。
WHERE BOOK + ALLO + ... > 0
負の値が可能である場合、これは私がそれを表現するために考えることができる最も簡潔な方法です:
WHERE ABS(BOOK) + ABS(ALLO) + ... > 0
また、これはデータベースに依存しません。
これらのソリューションは、null値が不可能な場合にのみ機能します。不可能な場合は、かなり厄介になります。