Sql 区别于;选择*”;及;选择Table.Attribute";当使用;除「;
我正在寻找教授所有课程的教授。当我执行以下操作时,我得到了正确的答案Sql 区别于;选择*”;及;选择Table.Attribute";当使用;除「;,sql,except,Sql,Except,我正在寻找教授所有课程的教授。当我执行以下操作时,我得到了正确的答案 select P1.pid from Professors P1 where NOT EXISTS(select C2.cid from Teaches T2, Courses C2 where T2.cid = C2.cid EXCEPT select C3.cid
select P1.pid
from Professors P1
where NOT EXISTS(select C2.cid
from Teaches T2, Courses C2
where T2.cid = C2.cid
EXCEPT
select C3.cid
from Teaches T3, Courses C3
where T3.cid = C3.cid AND T3.pid = P1.pid)
但是,当我执行此操作时,会得到一个空集:
select P1.pid
from Professors P1
where NOT EXISTS(select *
from Teaches T2, Courses C2
where T2.cid = C2.cid
EXCEPT
select *
from Teaches T3, Courses C3
where T3.cid = C3.cid AND T3.pid = P1.pid)
我没想到这两个查询会有所不同。为什么第二个查询什么也不返回?因为整个子查询给出不同的结果
。。。除了选择*。
将不同于。。。除了选择C3.cid…
。也就是说,除了C3.cid
的值列表之外,T3、课程C3
的组合在中是不同的 因为EXCEPT
比较行(并返回与第一个操作数不同的行)
显然,在第二种情况下,嵌套查询的结果是不同的,因此您什么也得不到