いつの間にか重複データが大量に保存されていて、データメンテをSQLで対応した時のメモです。
先人の知恵、すばらしいですね。
※注釈
使っている環境によっては @yuba さんのSQLで実行できます。
残念ながら、MySQLではdelete文にテーブル別名を指定できません。
環境
- MySQL 5.6.30
対応方法
ロジックは簡単で、重複を除いたデータを使ってそれ以外を削除します。
今回は残したいid
(primary key)を生成して、それ以外のデータを削除します。
# (確認)残したいデータを検索する
select min(id) from table_a group by column1,column2;
# 残したいデータ以外を削除する
# そのままだと削除できないので、サブクエリの中でテーブルを作成
delete from table_a
where id not in
(
select tmp1.id from (
select min(id) as id
from table_a
group by tmp1.column1,tmp1.column2
) as tmp1
);
#参考