[no_toc]
MySQLのテーブルレコード内の重複(ダブリ)データを抽出表示する方法の解説です。
重複データをまとめて表示する方法
1カラム重複の場合
SELECT * FROM 【テーブル名】 GROUP BY 【カラム1】 HAVING COUNT(*)>1
1カラムの重複を抽出するには、上記のように記載します。
例えば、3つ以上の重複しているレコードを調べたい場合は、
COUNT(*)>1を、COUNT(*)>2 にします。
複数カラム重複の場合
SELECT * FROM 【テーブル名】 GROUP BY 【カラム1】, 【カラム2】 HAVING COUNT(*)>1
上記の例では2カラム(カラム1+カラム2)が重複しているデータが抽出されます。
より多くのカラムが必要であれば、GROPU区をカンマ区切りで増やしていきます。
処理も軽く、記載方法も一番かんたんな方法ですが、表示される重複データはまとめて表示されます。
ただし、まとめて表示される為、どのレコードが重複しているかをリスト化できますが、どんなレコードが重複されているのかを知ることはできません。
※phpMyAdmin等でリスト表示させた後に手動で削除したい場合には不向きです。
重複データを全て表示する方法(ついでにソートも)
SELECT * FROM 【テーブル名】 AS x WHERE EXISTS (SELECT * FROM 【テーブル名】 WHERE x.【カラム1】 = 【カラム1】 AND x.【カラム2】 = 【カラム2】 GROUP BY 【カラム1】, 【カラム2】 HAVING COUNT(*)>1 ) ORDER BY x.【カラム1】 ASC, x.【カラム2】 ASC
上記のクエリの場合は、重複されたレコードを全て表示します。
条件は最初のものと同じく、「カラム1」+「カラム2」が重複しているデータを抽出します。
ついでにORDER句を使用し、ソートしています。
重複カラム以外の違いを参照する場合に有効です。
ただし、負荷がより多くかかるので、大量のレコードがある場合は処理時間がかかる場合があります。
コメント