the*_*ide 1 sql arrays postgresql operators array-comparison
我在 postgres 中有一个表,其中一value列包含字符串数组。我的目标是找到包含以下任何字符串的所有数组: {'cat', 'dog'}
id value
1 {'dog', 'cat', 'fish'}
2 {'elephant', 'mouse'}
3 {'lizard', 'dog', 'parrot'}
4 {'bear', 'bird', 'cat'}
Run Code Online (Sandbox Code Playgroud)
以下查询用于ANY()检查 'dog' 是否等于每个数组中的任何项目,并将正确返回第 1 行和第 3 行:
select * from mytable where 'dog'=ANY(value);
Run Code Online (Sandbox Code Playgroud)
我试图找到一种方法来搜索value字符串数组中的任何匹配项。例如 :
select * from mytable where ANY({'dog', 'cat'})=ANY(value);
Run Code Online (Sandbox Code Playgroud)
应该返回第 1、3 和 4 行。但是,上面的代码会引发错误。有没有办法在这个等式的左边使用 ANY() 子句?如果没有,检查数组中是否有任何字符串的解决方法是value什么?
您可以使用&&运算符来找出两个数组是否重叠。仅当每个数组中至少有一个元素匹配时,它才会返回 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"}');
Run Code Online (Sandbox Code Playgroud)
询问:
select * from mytable where array['dog', 'cat'] && (value);
Run Code Online (Sandbox Code Playgroud)
输出:
| ID | 价值 |
|---|---|
| 1 | {狗,猫,鱼} |
| 3 | {蜥蜴,狗,鹦鹉} |
| 4 | {熊,鸟,猫} |
db<>在这里摆弄
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |