2009-10-30 11 views
10

Postgres hat eine Array-Datentyp, in diesem Fall ein numerisches Array:Postgres - Vergleich von zwei Arrays

CREATE TABLE sal_emp (name text, pay_by_quarter integer[]); 
INSERT INTO sal_emp VALUES ('one', '{1,2,3}'); 
INSERT INTO sal_emp VALUES ('two', '{4,5,6}'); 
INSERT INTO sal_emp VALUES ('three', '{2,4,6}'); 
SELECT * FROM sal_emp; 

Result: 
one, {1,2,3} 
two, {4,5,6} 
three, {2,4,6} 

Von dem, was ich sagen kann, können Sie nur ein Array wie folgt abfragen:

SELECT * FROM sal_emp WHERE 4=ANY(pay_by_quarter); 
SELECT * FROM sal_emp WHERE ARRAY[4,5,6]=pay_by_quarter; 

Dies bedeutet, dass Sie eine Zeile auswählen können, in der das Array eine Übereinstimmung für ein einzelnes Argument enthält, oder wenn das gesamte Array einem Array-Argument entspricht.

Ich muss eine Zeile auswählen, in der jedes Mitglied des Array der Zeile mit jedem Mitglied eines Argumentarrays übereinstimmt - irgendwie wie ein "IN", aber ich kann nicht herausfinden, wie. Ich habe die folgenden zwei Ansätze ausprobiert, aber weder Arbeit:

SELECT * from sal_emp WHERE ARRAY[4,5,6]=ANY(pay_by_quarter); 
SELECT * from sal_emp WHERE ANY(pay_by_quarter) IN (4,5,6); 

Ich nehme ich etwas mit der Umwandlung der Array in einen String tun könnte, aber das klingt wie eine schlechte Lösung ..

irgendwelche Ideen?

Antwort