Suppliers(sid: integer, sname: string, address: string)
Parts(pid: integer, pname: string, color: string)
Catalog(sid: integer, pid: integer, cost: real)
找到供应每个部件的供应商的名称?
select s.sname
from suppliers s
where NOT EXISTS (select p.pid
from parts p
where p.color='red' and
NOT EXISTS (select c.pid from parts p where c.pid=p.pid and c.sid=s.sid and p.color='red'
)
)
此查询是否正确?
答案 0 :(得分:1)
以下内容可能不那么令人困惑。
Select s.name
from suppliers s
join catalog c on c.sid = s.sid
join parts p on p.pid = c.pid
WHERE Not Exists (Select p2.pid from parts p2 where p2.pid = c.pid)
答案 1 :(得分:1)
NOT EXISTS和EXCEPT都是条件函数。
如果内部子查询没有为该特定记录返回任何行,则NOT EXISTS打印特定记录或属性值。
例如:
select c.sid
from catalog c
where NOT EXISTS (select *
from parts p
where p.color<>'red' and
p.pid=c.pid);
此查询将返回仅提供红色部分的所有sid。
而EXCEPT表现为差异算子,其作用与我们在集合论中研究的相同。
例如:
A-B返回A中不存在的所有A行。