选择存在数组元素的所有行

时间:2019-11-22 15:56:19

标签: postgresql

我有一张桌子:

CREATE TABLE test_array
(
  id integer,  
  arr TEXT[]
);

我插入示例数据:

INSERT INTO test_array(id, arr) VALUES (1, '{"a", "b", "c"}');
INSERT INTO test_array(id, arr) VALUES (2, '{"d", "f", "c"}');
INSERT INTO test_array(id, arr) VALUES (3, '{"a", "z", "i"}');

我想获取元素{“ a”,“ c”}存在的行, 因此结果必须是:

'{"a", "b", "c"}'
'{"d", "f", "c"}'
'{"a", "z", "i"}'

我写查询:

select * from test_array where arr @> '{"a"}' or arr @> '{"c"}';

但是我想在一种情况下不使用or进行查询。有可能吗?

我运行select * from test_array where arr @> '{"a", "c"}';

它只返回我一行

https://rextester.com/ATMU4521

1 个答案:

答案 0 :(得分:2)

@>的意思是“包含”,因此右侧数组中的所有元素必须存在于左侧数组中。您正在寻找is described as“具有相同元素”的重叠&&运算符:

select * 
from test_array 
where arr && array['a', 'c'];

我更喜欢使用array[]表示法来指定数组常量,因为我不需要考虑嵌套的引号。