经过一天的努力,试图让这个查询发挥作用,我不得不寻求帮助。这是我第一次尝试 JOIN,所以请温柔地对待我;)
我有一个查询,根据 6 个表中的数据生成时间表。 Database relationship diagram
我的查询是:
SELECT
course.CourseName,
course.CourseID,
timetablepaeriods.PeriodName,
subject.SubjectName,
Subject.SubjectColour,
Room.RoomName
FROM
TimetablePeriods
LEFT JOIN Timetable ON
TimetablePeriods.PeriodID = Timetable.Period_ID
INNER JOIN Course ON
Timetable.Course_ID = Course.CourseID
INNER JOIN Subject ON
Course.Subject_ID = Subject.SubjectID
INNER JOIN CourseMembership ON
CourseMembership.Course_ID = Course.CourseID
INNER JOIN Room ON
Timetable.Room_ID = Room.RoomID
WHERE CourseMembership.Student_ID = 123
ORDER BY TimetablePeriods.SortOrder ASC
这将返回所有匹配的结果,但不返回 TimetablePeriods 中有值但没有其他值的行。
CourseName | CourseID | PeriodName | SubjectName | etc . . .
-----------|----------|------------|-------------|
y7Ma3 | 19 | MonP1 | Maths |
y7Hist4 | 16 | MonP2 | History |
y7Geog1 | 30 | MonP3 | Geography |
y7Eng3 | 28 | MonP5 | English |
我期望 MonP4 得到一行空白值。这存在于数据库中,如果我对 MonP5 上有空白的学生运行相同的查询,它会跳过该查询。
正如我在顶部所说,这是我第一次尝试使用 JOIN 语句,如果有更好的方法来解决这个问题,我很乐意听到。 预先感谢您的帮助。
最佳答案
正如 @Madhur Bhaiya 所解释的,我原始查询中的 WHERE 语句将所有内容更改为 INNER JOIN
我的解决方案
SELECT
r.CourseName,
r.CourseID,
r.SubjectName,
r.SubjectColour,
r.RoomName,
TimetablePeriods.PeriodName
FROM
(SELECT
Course.CourseName,
Course.CoureID,
Subject.SubjectName,
Subject.Colour,
Room.RoomName,
Timetable.Period_ID
FROM
Course,
Timetable,
Subject,
CourseMembership,
Room
WHERE
Course.CourseID = Timetable.Course_ID AND
Course.Subject_ID = Subject.SubjectID AND
Timetable.Room_ID = Room.Room_ID AND
CourseMembership.Course_ID = Course.CourseID AND
CourseMembership.Student_ID = 123) r
RIGHT JOIN TimetablePeriods ON
TimetablePeriods.PeriodID = r.Period_ID
ORDER BY TimetablePeriods.SortOrder ASC
关于mysql - LEFT JOIN 到 INNER JOIN 多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921789/