我是初学者所以请原谅我,如果我的问题看起来令人困惑,我不知道该怎么称呼它。
所以基本上我在查询中的表上有一堆连接,如下所示:
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
我做错了什么?
答案 0 :(得分:1)
不要OUTER JOIN
您的marks
表,LEFT JOIN
它。 LEFT JOIN
的目的是在未满足ON
条件时保留连接右侧的行,并将NULL
值替换为连接左侧的值。
答案 1 :(得分:1)
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
left join marks d on d.id=a.id // You don't need to make join on subject Id just need to join on student id
WHERE b.subject_grade_id=17
ORDER by a.surname ASC
您可以尝试以上查询。