不存在和sql之间的区别

时间:2014-10-21 23:58:04

标签: sql

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'
                                    )
                 )

此查询是否正确?

2 个答案:

答案 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行。