sno | pno | jno |
s1 | p1 | j1 |
s1 | p1 | j3 |
s1 | p1 | j4 |
s1 | p2 | j2 |
s2 | p3 | j1 |
s2 | p3 | j2 |
s2 | p3 | j4 |
s2 | p3 | j5 |
s2 | p5 | j1 |
s2 | p5 | j2 |
s3 | p1 | j1 |
s3 | p3 | j1 |
s4 | p5 | j1 |
s5 | p6 | j2 |
s5 | p6 | j4 |
以上是spj表。
sno是供应商号,pno是零件号,jno是项目号,spj这个表内容是供应情况,每个供应商供应多种零件(都在此表中体现),每种零件可由多个供应商提供(都在此表中体现),每个项目使用多种零件(都在此表中体现)。
查询:至少使用了供应商s5所供应全部零件的项目号。
要求用一句查询写出,当然可以用嵌套查询,也可以用EXCEPT等等。
想了半天也想不出,后来到CSDN上去求助,才得到如下答案。
select jno
from spj
where sno='s5'
group by jno
having count(distinct pno)=(
select count(distinct pno)
from spj
where sno='s5'
)
初看此应答不以为然,心想这题跟count有什么关系,又复习了一会儿后,猛然一激灵……对阿,对这题来说这种方法才是适用而且简单的查询
后有感叹,不写查询已久矣……全才难做啊