2012-12-28 37 views
1

可能重複:
Intersection of multiple arrays in PostGreSQLPostgreSQL的找到交點到N個陣列

我試圖找出在多個公共元素(> 2)在PG 9.2數據庫陣列。該數據的結構爲:

ID標題陣列
1 TITLE1 {A,B,C,d,...}
2 TITLE2 {Z,Y,A,d,...}
3 TITLE3 {d,A,p,q,...}
ñ......

從上面的例子中,SELECT應該返回{A,d},因爲每個陣列的共同的元件。

我得到這個工作使用2個數組作爲測試用例:

...
選擇ARRAY_AGG(e)由cte_1

從(
選擇UNNEST(ARR1)相交
選擇UNNEST從cte_2
(ARR2))爲DT(E)),
...

但是還沒有能夠使它與RECURSIVE CTE正常工作。在網上和各種Joe Celko書籍/片段中找到一些有用的示例。

我已經能夠拿出最好的是這篇文章使用自定義功能:

Intersection of multiple arrays in PostgreSQL

,但它似乎應該有一個方式做一個遞歸或其他技術實現這一點。

任何想法?

在此先感謝。

回答

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 module documentation

編輯Here's a similar question可能有用的答案。我會嘗試用戶depesz第一個建議的內容。