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 到底做了什么

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 13:59
点赞 评论 收藏
分享
07-25 13:42
门头沟学院 Java
安锋:看看老板的腿
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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