平等や不平等をテストするだけではない場合、ANYとALLが非常に役立つと思います。検討する
'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);
ANY
、ALL
そして、それらの否定は、さもなければ重要なサブクエリまたはCTEを必要とするコードを大幅に単純化することができ、私の見解ではそれらは大幅に十分に活用されていません。
ANY
どのオペレーターでも動作します。 LIKE
と非常に便利です および~
、ただし、tsquery、配列メンバーシップテスト、hstoreキーテストなどで機能します。
'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])
または:
'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])
ANY
なし またはALL
おそらく、VALUES
を介してサブクエリまたはCTEとしてそれらを表現する必要があります。 単一の結果を生成するための集計を含むリスト。もちろん、必要に応じてそれを行うこともできますが、私はANY
に固執します 。
ここに1つの本当の注意点があります:古いPgバージョンでは、ANY( SELECT ... )
を書いている場合 、EXISTS (SELECT 1 FROM ... WHERE ...)
を使用すると、パフォーマンスの面でほぼ確実に改善されます。 。オプティマイザーがANY (...)
をオンにするバージョンを使用している場合 参加するなら、心配する必要はありません。疑わしい場合は、EXPLAIN
を確認してください 出力。