2014-02-13 69 views
10

我知道,在PostgreSQL裏你可以運行像查詢任何元素:PostgreSQL的檢查,如果數組包含從左側陣列

SELECT (1 = ANY('{1,3,4,7}'::int[])) AS result檢查的右手數組包含的元素1。我想知道是否有一種簡單的方法來檢查右側陣列是否包含左側陣列中的任何元素。喜歡的東西:

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

是否有一個簡單的方法來做到這一點沒有遍歷左手環自己?

回答

21

當然,使用&&陣列重疊算子:

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

參見array functions and operators

+0

太棒了!正是我在找什麼。謝謝。 – Lander

2

假設你輸入的數組,但它是好的,他們使用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; 
+1

噢,'&&'更簡潔,希望更快。 –

+0

對。謝謝你的回答,因爲它讓我更瞭解了Postgres數組的可能性。 – Lander