19

可能重复:
在 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
4

3 回答 3

34
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

为了获得更好的性能,请添加一个INDEXon 列EMail

或者

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
于 2013-01-21T02:42:02.340 回答
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

尽管结果不是关系格式,但这会保存连接。

于 2013-01-21T03:27:08.097 回答
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;
于 2013-01-21T02:42:45.003 回答