gpt4 book ai didi

mysql - 左连接两个表并计数时的SQL执行顺序

转载 作者:行者123 更新时间:2023-11-29 03:34:00 27 4
gpt4 key购买 nike

我发现了一个类似的问题:What is the order of execution for this SQL statement .接受的答案指定 FROM 在任何其他子句之前执行。

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 首先执行(如果这是错误的,请告诉我),我们将为每个学生至少有一行作为中间输出,如果学生没有参加任何类(class),则可能具有 null 值.如果将 count() 应用于该输出,则由于空值行,此类学生将被计为 1,这在实际结果中不会发生。谁能解释一下这个查询是如何在幕后执行的?

提前致谢

最佳答案

您的问题不在于执行顺序。我认为这更多是因为

COUNT(StudentCourses.CourselD)

将只计算非空结果。

将其作为:

SELECT Students.StudentID, count(*) as [Cnt]
FROM Students LEFT JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID GROUP BY Students.StudentID

将返回所有的计数,而不仅仅是那些类(class) ID 不为空的行。

关于mysql - 左连接两个表并计数时的SQL执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26036344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com