34

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

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

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

有没有一种简单的方法可以做到这一点,而无需自己迭代左手循环?

4

2 回答 2

65

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

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

请参阅数组函数和运算符

于 2014-02-13T00:46:18.513 回答
5

假设您的输入是数组,但可以使用 展开它们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;
于 2014-02-13T00:48:09.163 回答