【问题标题】:Difference between "SELECT *" and "Select Table.Attribute" when using "EXCEPT"使用“EXCEPT”时“SELECT *”和“Select Table.Attribute”之间的区别
【发布时间】:2011-12-12 20:53:42
【问题描述】:

我正在努力寻找教授所有课程的教授。当我执行以下操作时,我得到了正确的答案。

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)

我没想到这两个查询会有所不同。为什么第二个什么都不返回?

【问题讨论】:

    标签: sql except


    【解决方案1】:

    因为EXCEPT 比较行(并从第一个操作数返回不同的行)。

    显然在第二种情况下嵌套查询的结果是不同的,所以你什么也得不到

    【讨论】:

      【解决方案2】:

      因为整个子查询给出不同的结果。

      ... EXCEPT SELECT * ... 将不同于 ... EXCEPT SELECT C3.cid ...。也就是说,Teaches T3, Courses C3 的组合在除了C3.cid 的值列表之外是不同的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        相关资源
        最近更新 更多