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 columnを追加します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 に答える