如何使用SQL Left Join返回空值

Rub*_*_PH 6 mysql left-join

请查看这个SQL Fiddle的表和我尝试过的查询:
SQL Fiddle

基本上,我有两个表,即tbl_curriculumtbl_enrolled_subjects.

tbl_curriculum包含学生应根据其课程(course_id)学习的所有科目(subject_id).
tbl_enrolled_subjects包含学生根据tbl_curriculum采取/注册的所有科目.

我想检查学生已经学习了哪些科目,哪些科目不是,查询应该返回如下内容:

Subject_id|Grade|Status
23        | 2   |Passed
24        | 2   |Passed
31        | 2   |Passed
50        | 2   |Passed
83        | 1   |Passed
27        |NULL |NULL 
28        |NULL |NULL 
29        |NULL |NULL 
Run Code Online (Sandbox Code Playgroud)

...等等.

具有成绩和状态的Subject_ID表示学生已经学习了该科目.另一方面,NULL值表示学生尚未学习这些科目.
我用过这个查询:

SELECT a.subject_id, b.grade, b.status
FROM tbl_curriculum a
LEFT JOIN tbl_enrolled_subjects b
ON a.course_id = b.course_id  AND a.subject_id = b.subject_id
WHERE b.student_id_no='05-0531';
Run Code Online (Sandbox Code Playgroud)

但我一直只接受学生所学的科目.

Subject_id|Grade|Status
23        | 2   |Passed
24        | 2   |Passed
31        | 2   |Passed
50        | 2   |Passed
83        | 1   |Passed
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?提前致谢.

pur*_*101 5

您没有找到任何空值的原因是因为您的where子句正在搜索填写了student_id_no的行.但是,对于您拥有的数据,如果学生没有上课,那么student_id_no也将为null ...因此您将过滤掉那些.

试试这个:

SELECT a.subject_id, b.grade, b.status, b.student_id_no
FROM tbl_curriculum a
LEFT JOIN tbl_enrolled_subjects b
ON a.course_id = b.course_id  AND a.subject_id = b.subject_id
where student_id_no is null or student_id_no = '05-0531'
order by subject_id
Run Code Online (Sandbox Code Playgroud)

http://sqlfiddle.com/#!2/4c7b2/43