[pgsql-jp: 29839] Re: intersectの使い方に関して
Takeshi Miyakawa
tak @ hdt.co.jp
2003年 5月 10日 (土) 17:50:37 JST
みやかわ@ホビー・データです。
Nobuo Nishino wrote:
>create table test
>(
> key integer,
> value varhar(100),
>)
>
>以上のようなテーブルがありデータは以下のようなデータがあるとします。
>
>| key | value |
>| 1 | a |
>| 1 | b |
>| 2 | b |
>| 2 | d |
>| 2 | e |
>| 3 | a |
>| 3 | b |
>| 3 | e |
>
>このようなデータがあるときに
>SELECT key FROM test WHERE value = 'a'
>intersect
>SELECT key FROM test WHERE value = 'b'
>と、SQLを実行した結果レコード件数が0件となってしまいます。
>(実際にはレコード件数2件でkey = 1と3が戻ると思うのですが )
戻りません。
query_a INTERSECT query_b
という形式は、query_aとquery_bの双方に現れる「行」を返します。
このケースでは、SELECT key FROM test WHERE value = 'a' は、
| 1 | a |
| 3 | a |
の2行を返します。
一方、SELECT key FROM test WHERE value = 'b'は、
| 1 | b |
| 2 | b |
| 3 | b |
の3行を返します。
前者と後者に重複する行はありませんから、INTERSECTは何も戻さ
ないのです。
ご希望の動作を実現するには、以下のように書くことになるかと思います。
SELECT key
FROM test
WHERE value = 'a' AND
key IN (SELECT key
FROM test
WHERE value = 'b');
pgsql-jp メーリングリストの案内