如何在PostgreSQL中比较数组
我在postgres中有一个包含字符串数组的如何在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
值列的表。我的目标是查找包含以下任何字符串的所有数组:{'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.
{熊、鸟、猫}