mysql - LEFT JOIN 到 INNER JOIN 多个表

标签 mysql left-join inner-join

经过一天的努力,试图让这个查询发挥作用,我不得不寻求帮助。这是我第一次尝试 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/

相关文章:

php - 通过查询数据库中的图像文件名,在 Codeigniter 中使用 AJAX 显示图像列表

mysql - 从一个带有连接的表中删除

mysql - MySQL 中的两个 INNER JOIN 或运算

sql-server - 使用一对多 JOIN 进行更新(多列)

mysql - Flask 内部 Web 应用程序在 python 上运行一段时间后死掉

mysql - 如何正确处理 node-mysql 连接池中的连接持久性事物

php - 按标记的所有类别显示联系人数据库,然后按字母顺序排列

mysql - 使用左连接的 SQL 查询出现问题

MySQL选择左连接为空的行

SQL 按组名称求和并存在内连接