LEFT JOIN到INNER JOIN多个表

时间:2019-09-13 10:21:43

标签: 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语句,如果有更好的方法可以解决这个问题,我很想听听。 预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正如@Madhur Bhaiya所解释的那样,我原始查询中的WHERE语句正在将所有内容更改为INNER JOIN

我的解决方案

const $ = cheerio.load(html);
const $dossier = $('.info-framework');
const $domestication = $dossier.find('div:nth-child(4)');