我发现了一个类似的问题:What is the order of execution for this SQL statement。接受的答案指定FROM在任何其他子句之前执行。左连接两个表并计数时的SQL执行顺序
SELECT StudentName, Students.StudentID, Cnt
FROM (
SELECT Students.StudentID, count(StudentCourses.CourselD) as [Cnt]
FROM Students LEFT JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID GROUP BY Students.StudentID
) T INNER JOIN Students on T.StudentID = Students.StudentID
count()在这种情况下如何工作?
我很困惑,因为它似乎不遵循我的逻辑。假设首先执行嵌套FROM中的LEFT JOIN(请让我知道这是否是错误的),我们将为每个学生至少有一行作为中间输出,如果学生没有参加任何课程,可能值为null 。如果将count()应用于该输出,则这样的学生将由于空值行而有1个计数,这在实际结果中不会发生。任何人都可以解释这个查询如何在引擎盖下执行吗?
在此先感谢
你准确的问题是什么?该查询正常工作,因为有效。除此之外,您正在做出错误的假设:您不知道语句的执行顺序,因此您无法确定“FROM”语句总是先执行。 **逻辑顺序!=执行顺序** – Paolo 2014-09-25 13:33:56
我看到查询是有效的,但我不知道如何应用count()。我已经在原始问题中做了一些澄清,如果您发现我的用词混乱,请告诉我。 – Jas 2014-09-25 13:56:34