MySQL列出所有重复记录

20

可能是重复问题:
在MySQL中查找重复记录

我有一个MySQL的表,像这样:

ID    name    email
1    john     abc@abc.com
2    johnny   abc@abc.com
3    jim      eee@eee.com
4    Michael  abec@awwbc.com

如何编写MySQL查询以列出重复的数据?

重复搜索结果:

ID    name    email         Duplicate
1    john     abc@abc.com      2
2    johnny   abc@abc.com      2

3
这个问题已经得到了回答:https://dev59.com/RXRA5IYBdhLWcg3wtwWe - Eric Leschinski
3个回答

35
SELECT  a.*, b.totalCount AS Duplicate
FROM    tablename a
        INNER JOIN
        (
            SELECT  email, COUNT(*) totalCount
            FROM    tableName
            GROUP   BY email
        ) b ON a.email = b.email
WHERE   b.totalCount >= 2

为了获得更好的性能,在EMail列上添加一个INDEX

或者

SELECT  a.*, b.totalCount AS Duplicate
FROM    tablename a
        INNER JOIN
        (
            SELECT  email, COUNT(*) totalCount
            FROM    tableName
            GROUP   BY email
            HAVING  COUNT(*) >= 2
        ) b ON a.email = b.email

@JW 我是做错了什么,还是你写的查询语句太复杂了?请看我的答案。 - Kamil
@Kamil,你的查询结果必须有两条记录:ID 1和2 - John Woo
我猜你误解了我的问题。这里只有一张表,下面的表格是从MySQL查询中得出的结果,而不是数据库中的另一张表。 - user1995781
@user1995781 这个查询只涉及一个表。 - John Woo

3
如果您可以接受将ID和名称放在逗号分隔的列表中,那么您可以尝试以下方法:
select email, count(*) as numdups,
       group_concat(id order by id), group_concat(name order by id)
from t
group by email
having count(*) > 1

这样可以避免进行连接操作,但结果不是关系型格式。


0

请查看此帖子,它来自MySQL论坛,内容如下:

SELECT t1.id, t1.name, t1.email FROM t1 INNER JOIN ( 
SELECT colA,colB,COUNT(*) FROM t1 GROUP BY colA,colB HAVING COUNT(*)>1) as t2 
ON t1.email = t2.email;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接