PostgreSQL检查数组是否包含左侧数组中的任何元素

时间:2014-02-13 00:30:36

标签: arrays postgresql

我知道在PostgreSQL中你可以运行如下的查询:

SELECT (1 = ANY('{1,3,4,7}'::int[])) AS result检查右侧数组是否包含元素1。我想知道是否有一种简单的方法来检查右手数组是否包含左手数组中的任何元素。类似的东西:

SELECT ('{2,3}'::int[] = ANY('{1,3,4,7}'::int[])) AS result

有没有一种简单的方法可以在不自行迭代左侧循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:32)

当然,使用&&数组重叠运算符:

SELECT ARRAY[1,2] && ARRAY[1,3,4,7];

请参阅array functions and operators

答案 1 :(得分:3)

假设您的输入是数组,但可以使用unnest()解包它们,这是一个解决方案:

SELECT count(*)>0
FROM
    (SELECT unnest('{2,3}'::int[]) a1) t1
    join (SELECT unnest('{1,3,4,7}'::int[]) a2) t2
        on t1.a1=t2.a2;