我有以下关系和找到每一个项目,最昂贵的一些条件
1.I要找到每一个供应商提供的零部件的PID,并在低于200 (如有供应商要么不不能简单地超过200,是不是选择了部分的部分或收费)
小提琴http://sqlfiddle.com/#!2/4b5d4
Supplies
sid 1 2 3 4 5
sname Jason David John Peter Jay
address 221 2b 3c 4d 5e
Parts
pid 10 20 30 40 50 60
pname Head Body Hand Leg Arm Foot
color red blue green white red green
Catalog
sid 1 1 2 2 3 4 1 1 4 4 1 5 5 3 3 2
pid 10 20 20 30 30 40 30 40 10 50 50 50 10 60 10 10
cost 150 220 150 150 130 125 130 280 123 126 120 100 100 210 100 50
所以我下面的查询 我认为,这等于说there is no parts that the suppliers don't supply it.
SELECT C.pid
FROM CATALOG C
WHERE C.cost < 200
AND NOT EXISTS (SELECT S.sid
FROM Suppliers S
WHERE NOT EXISTS
(SELECT P.pid
FROM Parts P
WHERE P.pid = C.pid
AND S.sid = C.sid))
但它返回null,则应该返回10
我想去寻找每一个提供绿色部分和红色部分供应商,打印最贵的名称和价格她供应的部分。
我只能找出绿色和红色部分,但找不到最贵的。
查询是我试过了。
SELECT S.sname
FROM Suppliers AS S,
Parts AS P1,
CATALOG AS C1,
Parts AS P2 ,
CATALOG AS C2
WHERE S.sid = C1.sid
AND C1.pid = P1.pid
AND S.sid = C2.sid
AND C2.pid = P2.pid
AND (P1.color = 'red'
AND P2.color = 'green')
我该如何解决?预先感谢。
ps对不起,我必须去上课,我会回复约6小时后。
能否请您解释,为什么'10'应该在结果列表中的第1部分? – 2013-05-09 05:50:00
因为pid为10的部分出现在每个供应商中,并且都小于200. – 2013-05-09 05:55:33