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);
我认为我可以将数组转换为字符串,但是听起来像是糟糕的解决方案。
有任何想法吗?
想通了…有一个&&运算符
http://www.postgresql.org/docs/8.2/static/functions- array.html
“ &&重叠(具有共同的元素)ARRAY [1,4,3] && ARRAY [2,1]”