1

可能重复:
PostGreSQL 中多个数组的交集

我正在尝试识别 Pg 9.2 数据库中多个 (>2) 数组中的公共元素。数据结构如下:

ID 标题数组
1 title1 {a,b,c,d,...}
2 title2 {z,y,a,d,...}
3 title3 {d,a,p,q,...}
n 。 …………

从上面的示例中,SELECT 应该返回 {a,d} 作为每个数组的公共元素。

我已经将这用于 2 个数组作为测试用例,使用:

...
select array_agg(e)
from (
select unnest(arr1) from cte_1
intersect
select unnest(arr2) from cte_2
) as dt(e)),
...

但是无法使其与 RECURSIVE CTE 一起正常工作。在网上和各种 Joe Celko 书籍/片段中找到了一些有用的示例。

我能想到的最好的就是这篇使用自定义函数的帖子:

PostgreSQL中多个数组的交集

但似乎应该有一种方法可以通过 RECURSIVE 或其他技术来实现这一点。

有任何想法吗?

提前致谢。

4

1 回答 1

0

如果您只需要无空值之间的交集int[],这可能很有用。对不起,如果不是这样,但你没有在你的问题中说清楚。

CREATE EXTENSION intarray;

SELECT ARRAY[1,2,3]::int[] & ARRAY[3,4,5]::int[] & ARRAY[1,3,5,7]::int[] as intersection;
intersection 
--------------
{3}
(1 row)

这是完整的intarray contrib 模块文档

编辑这是一个类似的问题,可能有用的答案。我会先尝试用户depesz 的建议。

于 2012-12-29T00:43:59.347 回答