这两个查询之间有什么区别?

时间:2019-09-24 20:05:48

标签: mysql sql subquery nested-queries nested-query

SELECT DISTINCT S.sname
FROM   student S,
       enrolled E1,
       enrolled E2,
       class C1,
       class C2
WHERE  S.snum = E1.snum
       AND S.snum = E2.snum
       AND E1.cname <> E2.cname
       AND E1.cname = C1.NAME
       AND E2.cname = C2.NAME
       AND C1.meets_at = C2.meets_at;  

SELECT DISTINCT S.sname
FROM   student S
WHERE  S.snum IN (SELECT E1.snum
                  FROM   enrolled E1,
                         enrolled E2,
                         class C1,
                         class C2
                  WHERE  E1.snum = E2.snum
                         AND E1.cname <> E2.cname
                         AND C1.meets_at = C2.meets_at);  

两个查询都在执行并显示输出 第一个查询显示输出为空集,第二个查询显示输出为非空

我认为这两个查询将给我相同且正确的输出,但是只有第二个查询显示正确的结果。 谁能解释两个查询之间的区别是什么? 预先感谢。

1 个答案:

答案 0 :(得分:0)

在第二个查询中,“ Es”和“ Cs”之间没有指定连接关系,因此将成为交叉连接(一切都匹配)。您在第一个查询中有这个,而在第二个查询中没有可比的:

       AND E1.cname = C1.NAME
       AND E2.cname = C2.NAME