LoginSignup
0
0

More than 1 year has passed since last update.

重複しているレコードの内、最も古いレコードだけを残すSQL

Posted at

背景

登録時の重複チェックがうまく効いてなかったのか、同じ内容のレコードが複数登録されてしまっていて、
重複しているレコードのうち登録が一番古いレコードだけを残したかった際に実行したSQL。
※ここでは「最も古いレコード = idが一番若いレコード」として書いてます。

実行したSQL

DELETE FROM `[table_name]` WHERE id NOT IN (SELECT min_id FROM (SELECT min(table1.id) AS min_id FROM `[table_name]` AS table1 GROUP BY table1.[column]) AS table2);

[table_name]に対象のテーブル名、[column]に重複が確認できるカラム名を入れて実行すれば、idが一番若いレコード以外のレコードが削除されます。

SELECT文の中の「min(table1.id)」の箇所を変えてあげれば、id以外のカラムでもできます。

そもそもそんなレコードが作られる際にちゃんと対策しとけよと思いますが、何かしらの要因で重複してしまった際の対応策として。。。

0
0
0

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
0
0