我的查询中有一堆表连接,如下所示:
SELECT a.id, a.firstnames, a.surname,b.subject_grade_id
FROM students a
LEFT JOIN student_subject b ON a.id=b.studentid
LEFT JOIN subject_grade c on b.subject_grade_id=c.id
WHERE b.subject_grade_id=?
ORDER by a.surname ASC
这给了我这样的结果:
id firstnames surname subject_grade_id
---------------------------------------------
8 John Doe 17
9 Bob Mitchell 17
10 Mary Smith 17
现在,我还有一个 marks
表,我想将其加入到我的查询中。假设该表是否只有一个这样的值:
id term studentid subjectid mark
---------------------------------------------
1 2 8 17 25
我的预期输出是这样的:
id firstnames surname subject_grade_id mark
-----------------------------------------------------
8 John Doe 17 25
9 Bob Mitchell 17 null
10 Mary Smith 17 null
我怎样才能做到这一点?
我试过这个:
select a.id, a.firstnames, a.surname,b.subject_grade_id,d.mark
from students a
left join student_subject b ON a.id=b.studentid
left join subject_grade c on b.subject_grade_id=c.id
outer join marks d on d.subjectid=b.subject_grade_id
WHERE b.subject_grade_id=17
ORDER by a.surname ASC
但它给了我这样的结果:
id firstnames surname subject_grade_id mark
--------------------------------------------------------
8 John Doe 17 25
9 Bob Mitchell 17 25
10 Mary Smith 17 25
我做错了什么?
最佳答案
不要OUTER JOIN
您的marks
表,LEFT JOIN
它。 LEFT JOIN
的目的是在不满足 ON
条件时保留连接右侧的行,并将 NULL
值替换为联接左侧的值。
关于MySQL 仅在值存在时才加入一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439377/