postgres - сравнение двух массивов - PullRequest
17 голосов
/ 30 октября 2009

postgres имеет тип данных массива, в данном случае числовой массив:

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}

Из того, что я могу сказать, вы можете запросить массив только следующим образом:

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

, что означает, что вы можете выбрать строку с массивом, содержащим совпадение для одного аргумента, или если весь массив соответствует аргументу массива.

Мне нужно выбрать строку, где любой элемент массива строки соответствует любому члену массива аргументов - вроде как «IN», но я не могу понять, как. Я попробовал следующие два подхода, но ни один из них не работает:

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

Полагаю, я мог бы что-то сделать с преобразованием массива в строку, но это звучит как плохое решение ..

есть идеи?

1 Ответ

24 голосов
/ 30 октября 2009

понял ... есть оператор &&

http://www.postgresql.org/docs/8.2/static/functions-array.html

"&& overlap (имеют общие элементы) ARRAY [1,4,3] && ARRAY [2,1]"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...