ここから本文です

MySQLで1つのテーブル全件内で重複データ(数件ある場合もあります)を1件だけ残し削...

lllasakuralllさん

2013/4/915:40:59

MySQLで1つのテーブル全件内で重複データ(数件ある場合もあります)を1件だけ残し削除する方法をさがしております。

「DELETE FROM テーブル WHERE id IN(SELECT (test_cd) FROM (SELECT id AS test_cd FROM テーブル GROUP BY 重複確認カラム HAVING COUNT(*) > 1) AS temp1)」

上記の内容で実行しますと重複データが2件の場合でも3件以上の場合でも1件しか削除されず、しかも新しいデータが残り古いデータが消えるのですが古いデータ(AUTO_INCREMENT idの若い方)を残し、新しいデータを削除する形にしたいのです。可能であれば1行1回の実行ですませたいのですが方法ございますでしょうか?

※理由としてはデータ量が膨大な為、処理負担・時間を軽減したい為です。

どなたかわかる方、ご教授のほうお願い致します。

閲覧数:
6,066
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

mzg_hrmさん

2013/4/916:55:19

削除対象を抽出するよりは、残したい行を取り出す方が、select文を書きやすそうなので、not in を使えばいけそう

delete from `対象テーブル`
where id not in ( select min_id from
( select min(t1.id) as min_id from `対象テーブル` as t1
group by t1.重複確認カラム
) as t2
) ;

実行確認はしてないので、打ち間違いあったらすみません。

質問した人からのコメント

2013/4/9 17:44:54

ご返答有難うございます!ご教授いただいた内容で実行!思い描いた通りの重複削除ができました!感謝感激です!大変有難う御座いました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。