查找在某个列中出现多次值的所有行

时间:2014-01-20 19:47:25

标签: sql postgresql

假设我有一个包含两列的数据库,一个id(bigint)和一个text(text)。我想查找数据库中具有多个行中出现的id的所有行。我怎么能这样做?

示例:

1; foo  
2; bar 
3; baz
2; fubar
4; blah
3; bleh

期望的输出:

2; bar 
2; fubar
3; baz
3; bleh

我对SQL很新。我有一个想法,我想要的东西

SELECT id,text FROM mytable ORDER BY id ASC;

但我不知道如何消除id唯一的行。我基本上需要SELECT DISTINCT的反面。提前谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用窗口函数执行此操作:

select id, text
from (select t.*, count(*) over (partition by id) as cnt
      from table t
     ) t
where cnt > 1;

答案 1 :(得分:1)

这样的事情:

WITH more_than_one AS (SELECT id,count(*) FROM table1 GROUP BY id HAVING count(*) > 1)
SELECT * FROM table1 JOIN more_than_one ON table1.id = more_than_one.id;