2017-06-29 36 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

了解更清晰的部分,但查询计划看起来更好,没有交叉连接解决方​​案;)但是,如果没有太多的数据要通过那么没关系 - 只是一点优化技巧:) –

相关问题