0

私は次の関係を持っています

Supplies            
sid     1       2       3       4
sname   Jason   David   John    Peter
address 1a      2b      3c      4d


Parts                       
pid     10      20      30      40      50
pname   Head    Body    Hand    Leg     Arm
color   red     blue    green   white   red


Catalog             
sid     1   1   2   2   3   4   1   1   4   4   1
pid     10  20  20  30  30  40  30  40  10  50  50
cost    100 200 150 150 130 125 50  180 123 126 120

そして、すべての赤または緑の部品を供給するサプライヤの sid を選択したいと考えています。という意味だと思いますit not exist that green or red parts that not supplied by him.

したがって、次のクエリを実行しますが、null を返します。sid is 1 を返す必要があると思います。

SELECT S.sid
FROM Suppliers S
WHERE NOT 
EXISTS (

SELECT P.pid
FROM Parts P
WHERE P.color = 'red' OR P.color = 'green'
AND NOT 
EXISTS (

SELECT C.pid
FROM Catalog C
WHERE C.pid = P.pid
AND C.sid = S.sid
)
)

どうすれば修正できますか?少し早いですがお礼を。

4

2 に答える 2

1

ORあなたのクエリは正しいですが、間違った結果を引き起こす括弧の欠落を除いて( ANDhas high precedence than OR)。そのはず:

WHERE (P.color = 'red' OR P.color = 'green')

また:

WHERE P.color IN ('red', 'green')
于 2013-05-08T23:07:34.690 に答える