0

テーブル B のレコードと 1-* の関係を持つテーブル A があります (つまり、A の単一のレコードに対応する B の複数のレコードが存在する可能性があります)。

B の各レコードには値列 X があります。

B に特定の値 Y の対応するレコードがない A からのレコードを検索したいと考えています。

たとえば、A には 3 つのレコードがあります (ここでは左側に数字 1、2、3 として表されています)。それぞれに、カンマ区切りのリストで表される値を持つ B のレコードがあります (区切られた各値は B のレコードです)。

1   a,b
2   a,c
3   b,c

'a' の値を持たないすべてのレコードを取得したい場合 (つまり、レコード 3 が必要)、どうすればよいですか?

4

1 に答える 1

2

次のいずれかを使用して実行できますWHERE NOT EXISTS

SELECT *
FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE X = 'a' AND A.ID = B.ID)

または: LEFT JOIN_WHERE ... IS NULL

SELECT A.* 
FROM A
LEFT JOIN B ON B.ID = A.ID AND B.X = 'a'
WHERE B.ID IS NULL

B.X = 'a'JOIN条件の一部であるため、一致するのは B の行のみでX = 'a'あり、そのような行が存在しない場合 (つまりIS NULL)、A の行が必要です。

于 2013-05-29T15:51:07.873 に答える