web-dev-qa-db-ja.com

PostgreSQLは、配列に左側の配列の要素が含まれているかどうかを確認します

私はPostgreSQLで次のようなクエリを実行できることを知っています:

SELECT (1 = ANY('{1,3,4,7}'::int[])) AS resultは、右側の配列に要素_1_が含まれているかどうかを確認します。右側の配列にleft-hand配列の要素が含まれているかどうかを確認する簡単な方法があるかどうか疑問に思いました。何かのようなもの:

SELECT ('{2,3}'::int[] = ANY('{1,3,4,7}'::int[])) AS result

左側のループを自分で繰り返すことなくこれを行う簡単な方法はありますか?

24
Lander

確かに、&& array-overlaps演算子:

SELECT ARRAY[1,2] && ARRAY[1,3,4,7];

配列関数と演算子 を参照してください。

43
Craig Ringer

入力が配列であると仮定しますが、unnest()を使用してそれらをアンラップしても問題ありません。これが解決策です。

SELECT count(*)>0
FROM
    (SELECT unnest('{2,3}'::int[]) a1) t1
    join (SELECT unnest('{1,3,4,7}'::int[]) a2) t2
        on t1.a1=t2.a2;
3
Daniel Sparing