2014-02-13 17 views
10

Ich weiß, dass in PostgreSQL Sie eine Abfrage wie ausführen können:PostgreSQL prüfen, ob Array ein beliebiges Element enthält linken Array

SELECT (1 = ANY('{1,3,4,7}'::int[])) AS result zu überprüfen, ob die rechte Array 1 das Element enthält. Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt zu überprüfen, ob das rechte Array irgendein Element aus dem linken Array enthält. Etwas wie:

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

Gibt es eine einfache Möglichkeit, dies zu tun, ohne mich über die linke Schleife iterieren?

Antwort

21

sicher, verwenden Sie die && Array-Überlappungen Betreiber:

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

array functions and operators See.

+0

Fantastic! Genau das, was ich gesucht habe. Vielen Dank. – Lander

2

Unter der Annahme, dass Ihre Eingaben Arrays sind, aber es ist in Ordnung, sie mit unnest() auszupacken, ist hier eine Lösung:

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

oh well '&&' ist hands down prägnanter und hoffentlich schneller. –

+0

Rechts. Vielen Dank für Ihre Antwort, denn sie hat mir mehr über die Möglichkeiten von Postgres-Arrays gelehrt. – Lander

Verwandte Themen