纯SQL高难问题!!! 请各位赐教。 (10分)

  • 主题发起人 主题发起人 引力
  • 开始时间 开始时间

引力

Unregistered / Unconfirmed
GUEST, unregistred user!
有一表spj:
sno pno jno qty
s1 p1 j1 200
s1 p1 j2 400
s1 p2 j2 300
s2 p4 j5 500
... ... ... ...
sno代表供应商代码
pno代表零件代码
jno代表工程项目代码
qty代表供应数量
现需要查询至少用了供应商s1所供应的全部零件的工程号jno.
请问这样的SQL语句该如何写?谢谢各位。
 
不知道是不是如下面那么简单,我都不敢相信自己! 呵呵
select * from spj where sno = 's1'
 
to kk2000:
你的答案不对呀。
select jno from spj where sno = 's1'
这返回的是供应商s1有关的所有工程项目代码。和我的意思不一样呀。
 
那你说清楚一点,好吗? 我糊里糊涂的
 
我的意思是:查询至少用了供应商s1所供应的(全部零件)的工程号jno.
你刚才的那一句是只要涉及到供应商s1,那怕只用了一种零件也返回呀。
 
请赐教。
 
你写一下你要查询的结果出来看看吧! 我的理解能力好差!
 
to kk2000:
像上面给出的数据,结果应该为j2.
 
请问kk2000,搞定了吗?
 
晕,"(全部零件)的工程号jno"
你的 "全部零件"是在哪定义的呀???
 
我的意思就是动态让它查询出全部零件,然后根据这个再查询符合上面条件的jno.
//我原以为这个问题简单的,现在看来,它不只值10分了,顺便改标题。
 
select pno from spj
where jno in (select jno from spj where sno='s1')
 
呵呵,来来嘛.
看到10题我看都不看,我还真以为简单.后来看到回复了七八次还没解决.进来看一下.原来如此.
我现在来解读你的"全部零件"
我认为吧:全部零件应该是对一个产品来说的,那么你的有这个产品的BOM表.
像你上面的题,你说是j2,那我也可以认为j5也是呀,因为可以说他的全部零件就是P4呀
 
to 117777:
你好,你的返回值是pno,并不是我要的jno,请再帮我看看。
你现在返回的是有关s1的jno所有的零件号。
 
晕,如果真的一定要得到j2.
对上面的数据而言也可以做出来.
select pno,jno from spj group by jno having(count(*))>1
 
Select Distinct jno
from spj where sno='s1' and jno not in
(select distinct jno from spj where sno<>'s1')
 
这样可以吗。。
--------------------
SELECT min([jno])
FROM spj
GROUP BY [sno], [pno]
HAVING sno='s1' and count(pno)=1;
 
同意jianguobu
用count其实也可以的
先算一下select count(*) from spj group by pno having sno = 'j1'
然后用jianguobu的语句,就是把最后的1替换掉
 
to: 引力
楼上的符合你的要求没有! 符合的话我就不写了。
好象楼顶的可以,不过有点缺陷。其实楼主的要求还有点模糊.
 
后退
顶部