我有一张桌子:
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"}';
它只返回我一行
答案 0 :(得分:2)
@>
的意思是“包含”,因此右侧数组中的所有元素必须存在于左侧数组中。您正在寻找is described as“具有相同元素”的重叠&&
运算符:
select *
from test_array
where arr && array['a', 'c'];
我更喜欢使用array[]
表示法来指定数组常量,因为我不需要考虑嵌套的引号。