2016-11-22 2 views
0

как вы конвертируете запрос объединения в вложенный запрос (используя условие «где в»)? , например, как преобразовать это во вложенный запрос?конвертировать запрос в вложенный запрос

SELECT student.studentname, 
     schedule.subcode, 
     AVG(attendance.ispresent)*100 AS Attendance_Status 
FROM student 
JOIN attendance 
    ON student.usn = attendance.usn 
JOIN schedule 
    ON schedule.sched_id = attendance.sched_id 
WHERE student.usn="4jc14is008" 
GROUP BY schedule.subcode 
ORDER BY schedule.subcode; 
+2

Я думаю, что двойное соединение может потребоваться дважды вложенное предложение WHERE (прочитанное: действительно уродливое). Зачем вам это нужно, если вы не используете что-то вроде JPA, которое по какой-то причине требует такого формата? –

+0

@TimBiegeleisen, возможно ли иметь вложенные запросы, которые включают 3 таблицы? Каков синтаксис? – Siraj

+0

@TimBiegeleisen вы можете подробно рассказать о двойном гнездовании, о котором вы упомянули – Siraj

ответ

0

Это будет оценено как NLJ («Вложенная петля присоединения»).

  1. Просмотрите student, фильтруя по usn = '...'.
  2. Для каждой такой строки (вероятно, в этом случае), сделайте NLJ в attendance, чтобы найти все и все строки, которые соответствуют заданному ON. Это приводит к более длинному (или короче) списку строк.
  3. Для каждого из строк в # 2 выполните NLJ в schedule на основе ON. Теперь есть набор строк ...
  4. Сделайте GROUP BY и ORDER BY (они могут выполняться одновременно, так как они идентичны). Это не даст больше строк, чем показано в # 3. (GROUP BY никогда не может увеличить количество строк.)

ли не перемонтировать запрос в WHERE x IN (SELECT ...), что обычно делают работать медленнее.