查找具有相同值PostgreSQL的行

时间:2016-05-08 23:00:14

标签: sql database postgresql

在表格中,有些ID具有多个值

id|value
--|------
1 |a
1 |b
2 |a
2 |b
3 |a
3 |c
4 |a
5 |a
5 |b
...

所以如何选择具有相同值的所有id 1? 我想要的应该是这样的

id
--
1
2
5

2 个答案:

答案 0 :(得分:2)

如果您希望完全相同的值,您可以使用基于集合的方法:

select t.id
from t join
     t t1
     on t.value = t1.value and t1.id = 1
group by t.id
having count(*) = (select count(*) from t where t.id = 1);

假设没有重复项,则计算与每个id匹配的值的数量,然后检查是否存在相同的数字。

我应该承认string_agg()方法也很优雅:

select id
from (select id, string_agg(value, ',' order by value) as values,
             max(case when id = 1 then string_agg(value, ',' order by value)) over () as values_1
      from t
      group by id
     ) t
where values = values_1;

答案 1 :(得分:0)

还使用数组:

SELECT id
FROM (SELECT DISTINCT id FROM t ORDER BY 1) ids
WHERE ARRAY(SELECT value FROM t WHERE id = ids.id ORDER BY 1) =
      ARRAY(SELECT value FROM t WHERE id = 1 ORDER BY 1);

即使对于重复和/或NULL值,这也应该有用。