SQLもプログラミング言語…っぽい3
テーブルの自己結合
以下のようなテーブルがあり
CREATE TABLE name("pkey" text, "number" int, "family_name" text, "name" text); INSERT INTO name("pkey", "number", "family_name", "name") VALUES (00001, 12345, "山田", "太郎"); INSERT INTO name("pkey", "number", "family_name", "name") VALUES (00002, 12346, "山田", "花子"); INSERT INTO name("pkey", "number", "family_name", "name") VALUES (00003, 12346, "山田", "花子"); INSERT INTO name("pkey", "number", "family_name", "name") VALUES (00004, 12347, "山田", "嘘子"); INSERT INTO name("pkey", "number", "family_name", "name") VALUES (00005, 12348, "山田", "良子");
主キー | 整理番号 | 姓 | 名 | ... |
---|---|---|---|---|
00001 | 12345 | 山田 | 太郎 | ... |
00002 | 12346 | 山田 | 花子 | ... |
00003 | 12346 | 山田 | 花子 | ... |
00004 | 12347 | 山田 | 嘘子 | ... |
00005 | 12348 | 山田 | 良子 | ... |
主キーは異なるが、あるカラムについては重複があるレコードを探し出したいとする。GROUP BYするか?しかしそれだと何件重複があるのかわからんし…そんな時テーブルの自己結合が使える。
あるテーブル内にある重複レコードを抽出したい場合melpon.org
SELECT * FROM name WHERE pkey IN ( SELECT n1.pkey FROM name n1, name n2 WHERE n1.pkey <> n2.pkey AND n1.number = n2.number );
FROM句の後に来るのが実際同じテーブルだとしても特に問題なくWHEREで検索条件を指定できる。
この本が実用的で面白かったです。
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
IN句やサブクエリについては以下のエントリをどうぞnantonaku-shiawase.hatenablog.com
nantonaku-shiawase.hatenablog.com