MySQL列出所有重复项[重复]

Posted

技术标签:

【中文标题】MySQL列出所有重复项[重复]【英文标题】:MySQL List All Duplicates [duplicate] 【发布时间】:2013-01-04 02:27:25 【问题描述】:

可能重复:Find duplicate records in 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

【问题讨论】:

这个问题已经得到解答:***.com/questions/854128/… 【参考方案1】:

如果您可以接受以逗号分隔的列表中的 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

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

【讨论】:

【参考方案2】:
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
SQLFiddle Demo

为获得更好的性能,请在 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
SQLFiddle Demo

【讨论】:

@JW 我做错了什么,或者你写的查询太复杂了?看我的回答。 @Kamil 你的查询结果必须有两条记录:ID 1 and 2 我猜你错过了我在这里问的问题。只有一个表,下面的表是mySQL查询的结果,而不是数据库中的另一个表。 @user1995781 查询只涉及一张表。【参考方案3】:

在MySQL forums 上检查this post,得到以下信息:

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;

【讨论】:

以上是关于MySQL列出所有重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

删除mysql中所有重复的行

使用 Python 列出列表中重复值的索引

在MySQL中获取准确的重复行

选择所有但忽略重复项[重复]

python-列表排重并列出重复项和重复项最小索引

如何获取mysql重复项中的最后一条数据