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);
Полагаю, я мог бы что-то сделать с преобразованием массива в строку, но это звучит как плохое решение ..
есть идеи?