【MySQL】重複しているレコードを最古のものを残しすべて削除するSQL。

調べていたら神SQLを見つけたのでメモ。

サブクエリを用いる。

delete from `[table_name]` where id not in (select min_id from (select min(t1.id) as min_id from `[table_name]` as t1 group by t1.[duplicate_col]) as t2);

table_nameに対象のテーブル名を。
duplicate_colに重複レコードが確認できるカラム名を。

これで重複していた行は古いものを1件のみ残し、すべて削除される。

神すぎる。