如何在PostgreSQL中比较数组

如何在PostgreSQL中比较数组,sql,arrays,postgresql,operators,any,Sql,Arrays,Postgresql,Operators,Any,我在postgres中有一个包含字符串数组的值列的表。我的目标是查找包含以下任何字符串的所有数组:{'cat','dog'} id value 1 {'dog', 'cat', 'fish'} 2 {'elephant', 'mouse'} 3 {'lizard', 'dog', 'parrot'} 4 {'bear', 'bird', 'cat'} 以下查询使用ANY()检查“dog”是否等于每个数组中的任何项,并将正确返回第1行和第3行: select * from my

我在postgres中有一个包含字符串数组的
列的表。我的目标是查找包含以下任何字符串的所有数组:
{'cat','dog'}

id  value
 1  {'dog', 'cat', 'fish'}
 2  {'elephant', 'mouse'}
 3  {'lizard', 'dog', 'parrot'}
 4  {'bear', 'bird', 'cat'}
以下查询使用
ANY()
检查“dog”是否等于每个数组中的任何项,并将正确返回第1行和第3行:

select * from mytable where 'dog'=ANY(value);
我试图找到一种方法来搜索字符串数组中的任何匹配项。例如:

select * from mytable where ANY({'dog', 'cat'})=ANY(value);

应该返回第1、3和4行。但是,上面的代码会抛出一个错误。有没有办法使用这个等式左侧的ANY()子句?如果不是,检查数组中的任何字符串是否在
值中的解决方法是什么?

您可以使用
&&
运算符来确定两个数组是否重叠。仅当每个数组中至少有一个元素匹配时,它才会返回true

 create table mytable (id int, value text[]);
 insert into mytable values (1,'{"dog", "cat", "fish"}');
 insert into mytable values (2,'{"elephant", "mouse"}');
 insert into mytable values (3,'{"lizard", "dog", "parrot"}');
 insert into mytable values (4,'{"bear", "bird", "cat"}');
查询:

 select * from mytable where array['dog', 'cat']&&(value);
输出:

身份证件 价值 1. {狗、猫、鱼} 3. {蜥蜴、狗、鹦鹉} 4. {熊、鸟、猫}
您可以使用
&&
运算符来确定两个数组是否重叠。仅当每个数组中至少有一个元素匹配时,它才会返回true

 create table mytable (id int, value text[]);
 insert into mytable values (1,'{"dog", "cat", "fish"}');
 insert into mytable values (2,'{"elephant", "mouse"}');
 insert into mytable values (3,'{"lizard", "dog", "parrot"}');
 insert into mytable values (4,'{"bear", "bird", "cat"}');
查询:

 select * from mytable where array['dog', 'cat']&&(value);
输出:

身份证件 价值 1. {狗、猫、鱼} 3. {蜥蜴、狗、鹦鹉} 4. {熊、鸟、猫}