比较 PostgreSQL 中的两个数组
Compare two arrays in PostgreSQL
我在 postgres 中有一个 table,其中有一个包含字符串数组的 value
列。我的 objective 是查找包含以下任何字符串的所有数组:{'cat', 'dog'}
id value
1 {'dog', 'cat', 'fish'}
2 {'elephant', 'mouse'}
3 {'lizard', 'dog', 'parrot'}
4 {'bear', 'bird', 'cat'}
以下查询使用 ANY()
检查 'dog' 是否等于每个数组中的任何项目,并且将正确 return 第 1 行和第 3 行:
select * from mytable where 'dog'=ANY(value);
我正在尝试寻找一种方法来搜索 value
字符串数组中的任何匹配项。例如:
select * from mytable where ANY({'dog', 'cat'})=ANY(value);
应该 return 第 1、3 和 4 行。但是,上面的代码会引发错误。有没有办法在这个等式的左边使用 ANY() 子句?如果不是,检查数组中的任何字符串是否在 value
?
中的解决方法是什么
可以使用&&
运算符判断两个数组是否重叠。仅当每个数组中至少有一个元素匹配时,它才会 return 为真。
架构和插入语句:
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);
输出:
id
value
1
{dog,cat,fish}
3
{lizard,dog,parrot}
4
{bear,bird,cat}
db<>fiddle here
我在 postgres 中有一个 table,其中有一个包含字符串数组的 value
列。我的 objective 是查找包含以下任何字符串的所有数组:{'cat', 'dog'}
id value
1 {'dog', 'cat', 'fish'}
2 {'elephant', 'mouse'}
3 {'lizard', 'dog', 'parrot'}
4 {'bear', 'bird', 'cat'}
以下查询使用 ANY()
检查 'dog' 是否等于每个数组中的任何项目,并且将正确 return 第 1 行和第 3 行:
select * from mytable where 'dog'=ANY(value);
我正在尝试寻找一种方法来搜索 value
字符串数组中的任何匹配项。例如:
select * from mytable where ANY({'dog', 'cat'})=ANY(value);
应该 return 第 1、3 和 4 行。但是,上面的代码会引发错误。有没有办法在这个等式的左边使用 ANY() 子句?如果不是,检查数组中的任何字符串是否在 value
?
可以使用&&
运算符判断两个数组是否重叠。仅当每个数组中至少有一个元素匹配时,它才会 return 为真。
架构和插入语句:
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);
输出:
id | value |
---|---|
1 | {dog,cat,fish} |
3 | {lizard,dog,parrot} |
4 | {bear,bird,cat} |
db<>fiddle here