В чем разница между этими двумя запросами? - PullRequest
0 голосов
/ 24 сентября 2019
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);  

оба запроса выполняются и показывают выходные данные. Первый запрос показывает выходные данные в виде пустого набора, а второй запрос показывает некоторые непустые выходные данные

Iхотя оба запроса дадут мне одинаковый и правильный вывод, но только второй запрос показывает правильный результат.Может кто-нибудь объяснить, в чем разница между обоими запросами?Заранее спасибо.

1 Ответ

0 голосов
/ 24 сентября 2019

Во втором запросе не указана связь соединения между "Es" и "Cs", так что это будет перекрестное соединение (все совпадает со всем).У вас есть это в первом запросе и ничего похожего во втором:

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