Postgres 9.0 を使用する場合、特定の配列に値が存在するかどうかをテストする方法が必要です。これまでのところ、次のような方法を思いつきました。
select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)
しかし、もっと簡単な方法があるはずだと思い続けていますが、それがわかりません。これはより良いようです:
select '{1,2,3}'::int[] @> ARRAY[value_variable::int]
これで十分だと思います。でも、他にやり方があればぜひ教えてください!
ベストアンサー1
構造がシンプルになりますANY
:
SELECT value_variable = ANY ('{1,2,3}'::int[])
ANY
(括弧内)の右辺のオペランドは、セット(例えばサブクエリの結果)または配列使い方はいくつかあります:
重要な違い:配列演算子 ( <@
、、@>
など&&
)オペランドとして配列型を想定し、GINまたはGiSTインデックスをサポート一方、PostgreSQL の標準ディストリビューションでは、このANY
構造は要素型を左オペランドとして想定しており、プレーンな B ツリー インデックスでサポートできます (演算子の左側にインデックス式があり、例のようにその逆ではありません)。例:
これらはいずれもNULL
要素には機能しません。テストするにはNULL
: