只有存在值时,MySQL才会与一列连接

时间:2017-08-01 13:34:14

标签: mysql mysqli

我是初学者所以请原谅我,如果我的问题看起来令人困惑,我不知道该怎么称呼它。

所以基本上我在查询中的表上有一堆连接,如下所示:

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

我做错了什么?

2 个答案:

答案 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

您可以尝试以上查询。