ハードディスクメンテナンス

投稿記事数[8550]以上!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
(MySQL) key_buffer_sizeの変更 (Debian)

スポンサーリンク key_buffer_sizeとは、indexの常駐量。 これ …

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

スポンサーリンク Apache/2.2.22 (Debian7.4) エラーペー …

no image
Debian CPU確認 (Processor,スペック)

スポンサーリンク rootで cat /proc/cpuinfo でCPUの確認 …

no image
サーバー情報の表示内容(ServerTokens)変更 (Apache2.2.22 ,Debian7.4)

スポンサーリンク Apache/2.2.22 (Debian7.4) /etc/ …

twitter
Twitterのタイムラインをサイトに埋め込む方法 – コードをユーザー毎に変化させるには?

スポンサーリンク Twitterのタイムラインをサイトに埋め込むのには、Twit …

霜
冷杉流冷蔵庫 vs 灼熱CF-R6 – 冷却と発熱の仁義ナキ戦い、キミはこの衝撃に耐えられるかッ!!

スポンサーリンク 冷蔵庫のハナシをこのブログで書くとは思わなかったが&#8230 …

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

スポンサーリンク あるテーブルの列(カラム)`reg_time`には、年月日時分 …

no image
Debianのバージョンを調べる

スポンサーリンク ■詳細版■ lsb_release -a 返り — …

no image
[解決]ローカル内の他の端末からMySQLに接続できない件[my.cnf,bind-address]

スポンサーリンク DebianにMySQLを入れてDBサーバーとし、ローカル環境 …

Linuxの採用
SONYのデジタル一眼が動作緩慢(遅い)な理由 – Linuxの採用

スポンサーリンク SONYのデジタル一眼は、TLM(トランスルーセントミラー)を …