【问题标题】:MySQL List All Duplicates [duplicate]MySQL列出所有重复项[重复]
【发布时间】: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

【问题讨论】:

标签: mysql sql select duplicates


【解决方案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
    

    为获得更好的性能,请在 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 你的查询结果必须有两条记录: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;
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2016-04-01
      相关资源
      最近更新 更多