• WEB

SQL 値が重複したレコードの取得

  • さわちゃん
    さわちゃん システムちーむ
  • このエントリーをはてなブックマークに追加
SQL 値が重複したレコードの取得

おはこんばちわ、さわちゃんです。
休憩時間に休憩室で一緒にカップラーメンを食べる人募集中です!!(笑)

今回の記事は自分の勉強がてら、MySQLで重複レコードを抽出する方法について書いていきます。まだまだ勉強中のため、間違った事言ってるかもしれませんが、許してヒヤシンスm( __ __ )m

重複レコードの抽出

データベースにこんなテーブルがあったとします。※テーブル名 test

テーブル

今回はこの中から色のついている部分、「重複レコード」全てを抽出しようと思います。
さっそくSQLを書いてみます。


SELECT * FROM test
GROUP BY team, item_name
HAVING COUNT(*)>1);

「SELECT」にテーブルを指定!
「GROUP BY」で重複を見つけたい列をグループにする!
「HAVING COUNT(*)>1」で条件指定!!
※今回の条件はGROUP BYで出来たグループのカウントが、2以上のもの

実行!!

実行結果

重複レコード抽出

( ゚д゚)おぉ-!
重複してるデータは絞り込めたけどそうじゃない…

上記のSQLでは重複してるデータ全部を表示できなかったので、いろいろ調べて副問合せ(サブクエリ)を追加することに。。

副問合せ(サブクエリ)を追加する

こんな感じですか?

(。-`ω-)ンー


SELECT * FROM test
WHERE (team, item_name)
in ( SELECT team, item_name
     FROM test
     GROUP BY team, item_name
     HAVING COUNT(*) > 1 );
SQLでは,まず内側の副問合せが値を返し、それを外側の主問合せのWHERE句が受けて最終的な結果となります。

とのことです。。。((( ;゚Д゚)))

なる程…(⌒_⌒; タラタラ

と、とりあえず実行!

実行結果

kekka3

おぉ!!
指定したカラムが重複してる行を全て抽出できました!!

めだたしめでたし(´艸`〃)
ただし、データ量が多いテーブルでやると大変なことになるので注意ですよ!

データ量が多いテーブルで重複レコードを抽出する場合


SELECT * FROM テーブル名 x
WHERE EXISTS
(SELECT * FROM テーブル名
 WHERE x.[列1]=[列1] and x.[列2]=[列2]
 GROUP BY [列1],[列2] HAVING COUNT(*)>1);

()内のSELECTで重複データ(グループ)を抽出し、抽出したデータを条件に今度は()外のSELECTでデータを抽出している様です。


SELECT * FROM テーブルx
WHERE 列y in
(SELECT 列y FROM テーブルx GROUP BY 列y
HAVING COUNT(*) > 1);

調べてみたら意外と情報が無くて大変でした(´-ω-`;)ゞポリポリ

このエントリーをはてなブックマークに追加

さわちゃんが最近書いた記事

WRITERS POSTS もっと見る

他にもこんな記事が読まれています!

  • WEB
  • マーケティング
  • サーバー・ネットワーク
  • ライフスタイル
  • お知らせ