2017-06-29 68 views
0

我有表foo(ID整數,值VARCHAR []):返回陣列的公共元素在結果集 - 的PostgreSQL

Id/Values 
1/A,B,C 
2/A,C 

我想編寫查詢它爲所有僅返回元件值的數組共同記錄。

因此,對於上述我想獲得A,C

任何ides?謝謝!

+0

謝謝,我發現這裏的解決方案: https://stackoverflow.com/questions/37716219/postgres-overlap-arrays-from-one-column – user1038334

回答

1
with t (id, values) as (values 
    (1, '{A,B,C}'::varchar[]), 
    (2, '{A,C}') 
) 
select v 
from 
    t 
    cross join lateral 
    unnest(values) v(v) 
group by v 
having count(*) = (select count(*) from t) 
; 
v 
--- 
C 
A 
+0

正要張貼類似的事情:)對於注:你不需要使用'lateral'交叉連接。簡單的'SELECT v FROM t,LATERAL unnest(values)v(v)GROUP BY vv HAVING count(vv)> 1'會做同樣的事情:) –

+0

@KristoMägi我認爲明確'cross join'更清晰瞭解 –

+0

瞭解更清晰的部分,但查詢計劃看起來更好,沒有交叉連接解決方​​案;)但是,如果沒有太多的數據要通過那麼沒關係 - 只是一點優化技巧:) –

相關問題