SQL的EXISTS双重否定

NOT EXISTS

我们使用NOT EXISTS语句,最主要也是最困难的一个用法就是双重否定表示肯定。

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 S5 P2 J4 100 S5 P3 J1 200 S5 P6 J2 200 S5 P6 J4 500

这是一个工程表,SNO表示供应商代码,PNO是零件代码,JNO是工程号,QTY是数量

假设有一个题目问你:

查询所有至少使用了S1提供过的全部零件的工程

这里有歧义,S1提供了P1,P2两种零件,题目可能有两种理解

  • 这个工程至少使用了P1、P2两种零件而且都是S1提供的
  • 工程只要使用了P1、P2两种零件就符合要求了

这里我们采取后者。

那么我们的题目可以翻译成

求工程,不存在S1提供的零件类型该工程没有使用过。

我们来看三张图


代码如下:

select *
from spj x
where not exists
(
	select *
    from spj y
    where sno = 'S1' and not exists 
    (
		select * 
        from spj z
        where z.jno = x.jno and
        z.pno = y.pno
    ) 
);

推荐文章

SQL 中的 EXISTS 到底做了什么

全部评论

相关推荐

哇哇的菜鸡oc:他这不叫校招offer,而是实习offer
点赞 评论 收藏
分享
11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务