我有以下查询:
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吗?或为此创建一个新查询?
答案 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;