我有表foo(ID整數,值VARCHAR []):返回陣列的公共元素在結果集 - 的PostgreSQL
Id/Values
1/A,B,C
2/A,C
我想編寫查詢它爲所有僅返回元件值的數組共同記錄。
因此,對於上述我想獲得A,C
任何ides?謝謝!
我有表foo(ID整數,值VARCHAR []):返回陣列的公共元素在結果集 - 的PostgreSQL
Id/Values
1/A,B,C
2/A,C
我想編寫查詢它爲所有僅返回元件值的數組共同記錄。
因此,對於上述我想獲得A,C
任何ides?謝謝!
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
正要張貼類似的事情:)對於注:你不需要使用'lateral'交叉連接。簡單的'SELECT v FROM t,LATERAL unnest(values)v(v)GROUP BY vv HAVING count(vv)> 1'會做同樣的事情:) –
@KristoMägi我認爲明確'cross join'更清晰瞭解 –
瞭解更清晰的部分,但查詢計劃看起來更好,沒有交叉連接解決方案;)但是,如果沒有太多的數據要通過那麼沒關係 - 只是一點優化技巧:) –
謝謝,我發現這裏的解決方案: https://stackoverflow.com/questions/37716219/postgres-overlap-arrays-from-one-column – user1038334