MySQL日期筛选求助:编写2020年2月1日马术课程表查询语句
修正后的SQL语句
SELECT LessonDateTime, FirstName, LastName, RegisteredName FROM LessonSchedule LEFT JOIN Student ON LessonSchedule.StudentID = Student.ID INNER JOIN Horse ON LessonSchedule.HorseID = Horse.ID WHERE LessonDateTime >= '2020-02-01' AND LessonDateTime < '2020-02-02' ORDER BY LessonDateTime ASC, RegisteredName ASC;
关键修正说明
- 精准日期过滤:用
>= '2020-02-01' AND < '2020-02-02'替代单一的= '2020-02-01',能匹配当天所有带时分秒的课程记录,避免遗漏非整点的课程。 - 保留未分配学员的课程:
LEFT JOIN Student会保留LessonSchedule中所有符合日期条件的记录,即使StudentID为NULL,此时FirstName和LastName会显示为NULL,完全满足需求。 - 避免错误过滤:确保日期条件仅作用于
LessonSchedule表,不要在WHERE子句中添加针对Student表的非NULL约束(比如FirstName IS NOT NULL),否则会丢失未分配学员的课程。
如果你的课程允许未分配马匹的情况,只需将INNER JOIN Horse改为LEFT JOIN Horse即可,此时未分配马匹的课程的RegisteredName会显示为NULL。
内容的提问来源于stack exchange,提问作者Beansie
相关产品推荐
相关产品推荐

