我有表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