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

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

  関連記事

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

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

no image
「実践ハイパフォーマンス MySQL」を購入

「実践ハイパフォーマンス MySQL 第3版」を購入した。 アマゾンから箱が&# …

Optimize Your Database
WordPressで使用しているデータベースの使用容量を下げる方法

WordPressはブログシステムだから、主にテキストと画像で構成される(本ブロ …

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

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

Intel SSD Toolbox
8MB化したSSD(X25-M SSDSA2MH080G1GC)の回復作戦 – 多大な犠牲の上に成功!

8MBとなってしまったIntelのX25-M SSDSA2MH080G1GC(8 …

no image
Apacheのサーバー情報(ServerSignature)非表示設定 (Apache2.2.22 ,Debian7.4)

Apache/2.2.22 (Debian7.4) エラーページに Apache …

no image
proftpd(FTPサーバー)の接続が遅い場合 (Debian7.4)

proftpd(FTPサーバー)にFFFTP等で接続できるが遅い場合。 /etc …

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

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

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

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

no image
DATE型にNULLを格納する方法(0000-00-00の回避,MySQL)

MySQLで、フィールド date を、DATE型、NULL許可で作成する。 d …