小编典典

postgres-比较两个数组

sql

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

我认为我可以将数组转换为字符串,但是听起来像是糟糕的解决方案。

有任何想法吗?


阅读 1427

收藏
2021-03-17

共1个答案

小编典典

想通了…有一个&&运算符

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

“ &&重叠(具有共同的元素)ARRAY [1,4,3] && ARRAY [2,1]”

2021-03-17