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

投稿記事数7,800以上!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


sha-bc@336×280

sha-bc@336×280

  関連記事

ダンプ行を指定する箇所
[MySQL] テーブルのエクスポートで、レコード数の不一致が生じる問題 [phpMyAdmin,Dump all rows]

DB(MySQL)にある巨大なテーブルをローカルに保存したいという質問を受けた。 …

CF-R6
CF-R6は、遅杉且熱杉流!危険杉流「ファンレス」PC

灼熱波動拳並(ふンッ! by 豪鬼 スパIIX)に熱い、パナソニック(旧松下電器 …

no image
Debian メモリー確認 (Memory,スペック)

rootで cat /proc/meminfo でメモリの確認が可能。 以下、表 …

WordPress
さくらインターネットからエックスサーバーへ?WordPressとデータベースの速度 Amazon S3との連携?

さくらインターネットは機能豊富で大容量かつ安価であるが、DB(データベース)が遅 …

no image
日付比較や日付検索が遅い場合の改善方法(BETWEEN,MySQL)

datetime型の列(reg_time)があるテーブルに対し、年月日指定をかけ …

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

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

no image
[mb_send_mail] 自宅Debianサーバーからメール送信 [Debian,exim4,Gmail]

自宅サーバー(Debian)から、外部へメールを送信する。 システムのエラー発生 …

NAS
首都大学東京の学内設置NASが踏み台にされ、スパムメールが送信される事案が発生

約10万通のスパムメール送信。 スパムメールは、15時06分から16時37分の間 …

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

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

no image
Debian7.4をハードウェアRAIDにインストールする際の設定(RAID1,ミラーリング)

Debianで起動ドライブを含んでソフトウェアRAID(ミラーリング)を組むと、 …