NOT EXISTS
我们使用NOT EXISTS
语句,最主要也是最困难的一个用法就是双重否定表示肯定。
SNO | PNO | JNO | QTY |
这是一个工程表,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
)
);
推荐文章