2016-11-22 162 views
0

如何将连接查询转换为嵌套查询(使用“where in”条件)? 例如如何将其转换为嵌套查询?将查询转换为嵌套查询

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中的每一行,根据ON根据schedule执行NLJ。现在有一组行...
  4. GROUP BYORDER BY(这些可以同时完成,因为它们是相同的)。这将不会比#3提供更多的行。 (GROUP BY不能增加行数。)

重新接线查询到WHERE x IN (SELECT ...),通常使其运行速度较慢。