日期:2014-05-16  浏览次数:20425 次

关于SQL数据库的一个查询问题求高手解答!
这是相关问题的内容  
SNO PNO JNO          QTY
S1  P1  J1         200
S1  P1  J3         100
S1  P1  J4         700
S1  P2  J2         100
S2  P3  J1         400
S2  P3  J2         200
S2  P3  J4         500
S2  P3  J5         400
S2  P5  J1         400
S2  P5  J2         100
S3  P1  J1         200
S3  P3  J1         200
S4  P5  J1         100
S4  P6  J3         300
S4  P6  J4         200
S3  P2  J4         100
S5  P3  J1         200
S5  P6  J2         200
S5  P6  J4         500
 
其中SPJ表有供应商代码(SNO),零件代码(PNO),工程项目代码(JNO),供应数量(QTY)组成,表示某供应商供应某种零件给某个工程项目的数量为QTY

问题是 求至少用了供应商S1所供应的全部零件的工程号JNO?

(我的想法是,按照这么样看的话,从度娘的答案出来都是J4,但是我自己的想法是S1只供应了2种零件P1和P2,题目所问的话即是要求都使用零件P1和P2,并且这两个零件都是S1所提供的,所以查询结果应该为空,也就是不存在符合要求的JNO。 求高手能用我的这个想法写出带有EXISTS的查询,我尝试很多次都失败,实在没办法于是来跪求!)
------解决方案--------------------
select distinct jno from ta s
where not exists(select * from ta t where sNO='s1' and
                  not exists(select 1 from ta p where t.pno=p.pno and s.JNO=p.jNO and p.SNO=t.sno))

这样呢?