Database MariaDB/MySQL OracleDB PostgreSQL インフラ

SQLで重複レコードを操作

投稿日:2017年10月19日 更新日:

データベースで重複レコードを抽出するSQLを紹介します。

グーグル先生に問いかけても良い感じの答えが返ってこないので公開します。

※このSQLはOracleDBを元に作成しております。


今回使用するデータ

今回は↓のデータを前提に説明します。

0001:TOKYOの2つと0004:TOKYO

0002:OKINAWAと0005:OKINAWA

が重複しています。

※COL03は最後に応用編で使います。

重複レコード行を除外

最も一般的な重複レコードの操作です。

もちろんDISTINCTを使用します。

COL02列の重複を除外した場合は↓が実行結果です。

もちろんDISTINCT句は条件を複数にすることもできます。

その場合をDISTINCTに指定した列を論理積として考えて重複を除外します。

↓が実行ログです。

 

重複しているレコードを抽出

恐らくこれを皆さん知りたいんでしょw

↓が基本形です。

COL02で重複指定列を取得したい場合は↓です。

COL01とCOL2の論理積で取得したい場合は↓です。

↑のようにHAVING COUNT~は3つのどのパターンでもいいゾ

※厳密にはちょっと違うけど結果は同じだからOK!

また「HAVING COUNT > 1」でも結果は同じです。

応用:重複しているレコードの”全列を抽出”

全列を抽出する場合には↓のように副問い合わせを使用す必要があります。

↓がCOL02で重複した行の取得ログです。

複数列の重複を確認したい場合は↓です。

↓がCOL01のCOL02の論理積で重複した行の取得ログです。

上級編:EXISTSを使用して重複レコードの”全列を抽出”

EXISTSを使用することで余計でデータ読み込みを行わず高速に処理をすることができます。

個人的にはですが、SQLの可読性は大きく落ちます。

↓のように記載します。

 

おまけ:テストデータの作成

テストデータの作成は↓です。

みんなもデータベースに入れて試してみよう!!

スポンサードリンク

関連記事

-Database, MariaDB/MySQL, OracleDB, PostgreSQL, インフラ

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.