请查看这个SQL Fiddle的表和我尝试过的查询:
SQL Fiddle
基本上,我有两个表,即tbl_curriculum和tbl_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)
我错过了什么吗?提前致谢.
您没有找到任何空值的原因是因为您的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
| 归档时间: |
|
| 查看次数: |
36243 次 |
| 最近记录: |