过滤多个内部联接

时间:2020-01-14 11:05:57

标签: mysql

我有以下查询:

SELECT courses.id as course_id, student_courses.student_id FROM courses
    INNER JOIN tutor_courses ON courses.id = tutor_courses.course_id
    INNER JOIN student_courses ON courses.id = student_courses.course_id
    INNER JOIN students ON students.id = student_courses.student_id
    WHERE tutor_courses.tutor_id = '201'
    GROUP BY course_id,student_id;

我得到下一个结果:

course_id, student_id
'100', '30'
'104', '20'
'101', '100'
'104', '200'
'100', '20'

我还有一个表,称为“联系人”:

id, course_id, student_id, contact_datetime, review

此表存储带有日期的评论。因此,一个学生可以有多个评论,但每天/每个课程只有一个。

现在,我想用联系人表过滤我的第一个查询,并仅显示使用选定的contact_datetime为null的结果。

我应该在第一个查询上使用LEFT JOIN吗?或为此创建一个新查询?

1 个答案:

答案 0 :(得分:-1)

如果没有行,则仅使用外部联接。使用内部联接也可以轻松处理具有空列的行。

SELECT courses.id as course_id, student_courses.student_id FROM courses
    INNER JOIN tutor_courses ON courses.id = tutor_courses.course_id
    INNER JOIN student_courses ON courses.id = student_courses.course_id
    INNER JOIN students ON students.id = student_courses.student_id
    INNER JOIN contacts ON contacts.course_id = courses.id and contacts.student_id = students.id
    WHERE tutor_courses.tutor_id = '201' and contacts.contact_datetime is null
    GROUP BY course_id,student_id;