2009-10-30 6 views
10

postgres a un type de données de tableau, dans ce cas, un tableau numérique:postgres - comparant deux tableaux

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} 

D'après ce que je peux dire, vous ne pouvez interroger un tableau comme suit:

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

ce qui signifie que vous pouvez sélectionner une ligne avec le tableau contient une correspondance pour un seul argument, ou si le tableau entier correspond à un argument de tableau.

Je dois sélectionner une ligne où n'importe quel membre du tableau de la rangée correspond à n'importe quel membre d'un tableau d'arguments - un peu comme un 'IN' mais je ne peux pas comprendre comment. J'ai essayé les deux approches, mais ni travaux suivants:

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); 

Je suppose que je pourrais faire quelque chose avec la conversion du tableau en une chaîne, mais qui sonne comme solution pauvre ..

des idées?

Répondre