【MySQL】複数条件で重複データを抽出する方法

MySQL
スポンサーリンク

[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句を使用し、ソートしています。

重複カラム以外の違いを参照する場合に有効です。

ただし、負荷がより多くかかるので、大量のレコードがある場合は処理時間がかかる場合があります。

コメント

タイトルとURLをコピーしました