ハードディスクメンテナンス ブログ

投稿記事数7,500以上!PC,カメラ,オーディオ,ラジオ,航空,旧ゲームなど

DISTINCTの逆(重複を抽出するSQL文)

   


以下のようなテーブルがある。

id,item_code,reg_date
1,00A,2014-04-01
2,00B,2014-04-02
3,00C,2014-04-03
4,00A,2014-04-04
5,00B,2014-04-05
6,00A,2014-04-06

ここから、重複を省いて結果を得たい時は DISTINCT を使う。

SELECT DISTINCT item_code FROM テーブル名 ;

00A
00B
00C

しかし「重複しているのは何か」を知りたい時がある。

その場合、以下で対応可能。

SELECT * FORM テーブル名 GROUP BY item_code HAVING COUNT(*) > 1 ;

item_codeでGROUP化し、その上で件数が1より多い、とすればよい。

1,00A,2014-04-01
2,00B,2014-04-02

但し、GROUP BYを使用しているため、重複している1件は取り出せるが、他は取り出せない。

00Aは3件重複、00Bは2件重複しているが、表示されるのは1件しかなく、その1件はそのうちどれかは未確定である。

関連:MySQLに於けるGROUP BYでのミス(集約キー以外を書いてしまう)

重複しているレコード全てを取り出すには、

SELECT * FORM テーブル名 WHERE item_code IN (SELECT item_code FROM テーブル名 GROUP BY item_code HAVING COUNT(*) > 1) ;

とする。

サブクエリは上のSQL文とほぼ同じで、全体からitem_codeが「重複したitem_code」と同じものを取り出すことで、実現している。

INはORの省略形、との理解で止まりがちだが、条件に合うものを取り出すには、INは非常に適している。

スポンサーリンク

では、ここで例題。

例題

sp_idは上司のidを示す。

<部下のいる人のid,name,wardを抽出セヨ>

回答:

SELECT id,name,ward FROM members WHERE id IN (SELECT sp_id FROM members) ;

SQLアンチパターン
Bill Karwin
オライリージャパン
売り上げランキング: 12,496


sha-bc@336×280

アマゾン(タイムセール)




sha-bc@336×280

アマゾン(タイムセール)


  関連記事

no image
CPU対決!激重SQL編!(Phenom X3 8400 vs Core i5 650)

実行時間が70秒近くかかる激重クエリがある。 この実行に於ける、ハードウェアの違 …

no image
Linuxのシステム情報の確認方法(OS,CPU,メモリ)

Windowsであれば、デスクトップ上の「マイコンピュータ」を右クリック>プロパ …

SSDとHDD_換装_CF-R6_C300(64GB)
Panasonic CF-R6の分解②(ハードディスクをSSDへ換装) CF-R7,CF-R8も同様

熱杉流かつ遅杉流、Panasonic(旧松下)のノートパソコンである、CF-R6 …

WordPress
WordPressに移行する際のURL混在問題 パーマリンク設定 カスタム構造

自分で作成したサイト(以下「旧サイト」)をWordPressに移行する場合、Ex …

no image
Debianのミラーの片方に不良セクタが発生(Current Pending Sector Count)

Debianのミラーの片方に不良セクタが発生した(代替処理待ちのセクタ)。 Cu …

パームレストの左側が特に熱い
ツイに100度達成!目標はサラに高く! – 熱杉流ノートパソコン、CF-R6

熱杉流状況で非常に危険な、CF-R6。 関連:気温上昇に伴い、CF-R6の温度が …

no image
バッドセクタ数:15→10→9→5→9wwwwwwwwww

ココで書いた、バッドセクタの発生したハードディスクだが、その後放置すると、バッド …

idを詰める(連番を振り直す)方法
[MySQL] idを詰める(連番を振り直す)方法

数分毎に定期的にログを取得するようなプログラムを書き、DBに格納し始める。 だが …

no image
時,分,秒を[年月日時分秒]から取り出す(MySQL,hour,minute,second,extract,date_format)

あるテーブルの列(カラム)reg_timeには、年月日時分秒がY-m-d H:i …

no image
DebianのインストールDVDに不良発生!

Debian7.4のインストールディスク(DVD)を作成して何度か使っているのだ …