我有一个列的表,我需要获得所有重复的行。这是表:
| name |
| ----- |
| a |
| a |
| b |
| c |
| c |
| d |
这是预期的结果集:
| name |
| ----- |
| a |
| a |
| c |
| c |
我已经这样做了:
SELECT t.name FROM my_table t inner join (
SELECT name, count(1) AS count FROM my_table t2 GROUP BY t2.name HAVING count > 1
) AS t1 on t1.name = t.name
没有子查询可以做到吗?
答案 0 :(得分:3)
评论太长了。
如果您只有一列,那么此输出不会吗?
select name, count(*) as num_duplicates
from t
group by name
having count(*) > 1;
这会为每个名称生成一行,其中包含重复数。如果你只有一列,那么它似乎是更好的输出(对我而言),而不是重复的名称列表。
答案 1 :(得分:1)
您需要首先带上计数名称> 1
select * from my_table where name in
(select name from my_table having count(name) > 1 group by name )