LoginSignup
27
26

More than 5 years have passed since last update.

[SQL]重複データを1件だけ残して削除する方法

Last updated at Posted at 2016-10-17

いつの間にか重複データが大量に保存されていて、データメンテを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
 );

参考

27
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26