【问题标题】:Compare two arrays in PostgreSQL比较 PostgreSQL 中的两个数组
【发布时间】:2021-03-12 17:41:21
【问题描述】:

我在 postgres 中有一个表,其中包含一个包含字符串数组的 value 列。我的目标是找到包含以下任何字符串的所有数组:{'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);

我正在尝试找到一种方法来搜索 value 以查找字符串数组中的任何匹配项。例如:

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

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

【问题讨论】:

    标签: sql arrays postgresql operators array-comparison


    【解决方案1】:

    您可以使用&& 运算符来找出两个数组是否重叠。仅当每个数组中至少有一个元素匹配时才会返回 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);
    

    输出:

    id value
    1 {dog,cat,fish}
    3 {lizard,dog,parrot}
    4 {bear,bird,cat}

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多