Я нашел аналогичный вопрос: 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() в этом случае?
Я смущен, потому что это, похоже, не соответствует моей логике. Предполагая, что LEFT JOIN во вложенном FROM выполняется сначала (пожалуйста, дайте мне знать, если это неверно). У нас будет по крайней мере одна строка для каждого учащегося как промежуточный вывод, возможно со значением null, если студент не проводит никаких курсов , Если для этого вывода применяется count(), у таких учеников будет 1 счет из-за нулевой стоимости, что не происходит в фактическом результате. Может ли кто-нибудь объяснить, как этот запрос выполняется под капотом?
Заранее благодарен
Ваш вопрос точно? этот запрос работает нормально, потому что он действителен. кроме того, что вы делаете неверное предположение: вы не знаете порядок выполнения утверждений, поэтому не можете точно сказать, что операторы 'FROM' всегда выполняются первыми. ** логический порядок! = порядок выполнения ** – Paolo
Я вижу, что запрос действителен, но я не уверен, как и когда применяется count(). Я сделал некоторые разъяснения в первоначальном вопросе, пожалуйста, дайте мне знать, если вы найдете мою формулировку запутанной. – Jas