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);
两个查询都在执行并显示输出 第一个查询显示输出为空集,第二个查询显示输出为非空
我认为这两个查询将给我相同且正确的输出,但是只有第二个查询显示正确的结果。 谁能解释两个查询之间的区别是什么? 预先感谢。
答案 0 :(得分:0)
在第二个查询中,“ Es”和“ Cs”之间没有指定连接关系,因此将成为交叉连接(一切都匹配)。您在第一个查询中有这个,而在第二个查询中没有可比的:
AND E1.cname = C1.NAME
AND E2.cname = C2.NAME