2009-10-30 22 views
10

Postgres tiene un tipo de datos de matriz, en este caso una matriz numérica:postgres - comparar dos matrices

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} 

De lo que puedo decir, sólo se puede consultar una matriz como sigue:

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

lo que significa que puede seleccionar una fila con la matriz contiene una coincidencia para un solo argumento, o si la matriz completa coincide con un argumento de la matriz.

Necesito seleccionar una fila donde cualquier miembro de la matriz de la fila coincida con cualquier miembro de una matriz de argumentos, algo así como un 'EN' pero no puedo entender cómo. He probado los dos enfoques siguientes, pero no trabajan:

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

Asumo que podía hacer algo con la conversión de la matriz en una cadena, pero que suena como mala solución ..

alguna idea?

Respuesta