 Contents
 Contents 
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ:  メールフォーム
 メールフォーム
NOT EXISTS と EXCEPT を利用して、『 val に「a,b,c」の3つの値すべてを持つid 』を探す。
まず、「a,b,c」のレコードを保持しているテーブル「fuga」
| val | 
|---|
| a | 
| b | 
| c | 
次に、検索対象のテーブル「hoge」
| id | val | 
|---|---|
| 1 | a | 
| 1 | b | 
| 1 | c | 
| 2 | a | 
| 2 | b | 
| 2 | x | 
| 3 | b | 
| 3 | c | 
| 3 | x | 
| 4 | z | 
| 4 | x | 
| 5 | v | 
| 5 | x | 
| 6 | b | 
| 6 | c | 
| 6 | a | 
select * from hoge h1 where NOT EXISTS ( (select val from fuga) EXCEPT (select val from hoge h2 where h1.id=h2.id) )
↓
| id | val | 
|---|---|
| 1 | a | 
| 1 | b | 
| 1 | c | 
| 6 | b | 
| 6 | c | 
| 6 | a | 
select distinct(id) from hoge h1 where NOT EXISTS ( (select val from fuga) EXCEPT (select val from hoge h2 where h1.id=h2.id) )
↓
| id | 
|---|
| 1 | 
| 6 | 
考え方)
「select val from fuga」で取得したレコードの集合から
「select val from hoge h2 where h1.id=h2.id」で取得したレコードの集合を差し引いて、
レコード数が0になれば「偽」になります。(条件を満たすレコードがすべて存在していたことになる)
その後の評価 NOT EXISTS 句 が否定しているので、「偽」が返ってきた場合に「真」となり該当レコードが残る仕組みです。