LoginSignup
0
0

More than 3 years have passed since last update.

【SQL】重複したデータを削除する

Posted at

はじめに

事の発端は、とあるテーブルの重複を削除するというあるある事象だったが、単純な重複削除ではない内容であり、無駄にGROUP BYとかHAVINGとか色々使ってドツボにハマってしまったので、備忘録としてメモ。

環境

Windows10
PostgreSQL 13.2
PgAdmin 4.29

状況説明

実際のテーブルに比べて相当デフォルメしているが、以下のようなカラムとデータが入ったテーブルがある。

Noはユニークだが、それ以外は同じデータである。dateは日付なのでまちまちだが、今回の抽出対象ではない。

・それぞれのカラムのデータ型,PKはテキトー。
・テーブル名は仮で「dup_test」とする。

スクリーンショット 2021-04-29 15.02.46.png

やること

・Name1, Name2, Name3が同じデータは削除する。ただし、1つは残す。

やったこと

まずはNoが1のデータが残れば良いよね、と考えた。
No=1 以外 のデータを取るには以下のSQLになる。
(基本中の基本ですがとりあえず記載します。)

select * from dup_test B where A.no <> 1

で、このデータをサブクエリにして、DELETEすればOKじゃないかと。

DELETE FROM dup_test A
WHERE exists(
select * from dup_test where A.no <> 1
)

スクリーンショット 2021-04-29 15.08.49.png

とりあえず上手くいった。(と思う。)

おわりに

同じケースであれば、取り急ぎこれで重複削除はできそう。

私自身SQLはそれなりに利用しているが、正直知見が乏しいので、シンプルで良い方法はこれからも模索していきたい。

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