我有四个桌子。
我需要一个查询,该查询将获取单个级别(例如,第一类的 id = 1 )和特定主题(例如< strong> id = 2 ,例如 English )
我有这个查询:
select name, test, exam
from `reports`
right join `students`
on `reports`.`student_id` = `students`.`id`
where `students`.`level_id` = '1'
and `reports`.`subject_id` = '2'
但是它仅显示报告表中记录的结果。如果没有结果表中的记录,期望从students表中指定了level_id的所有数据,但在其 test 和 exam 行中为NULL。 >
主要问题是查询中的subject_id子句(和reports
。subject_id
='2')。它仅在记录表Here is the result
当我使用不在结果表Here is the result -not returning anything中的subject_id时
答案 0 :(得分:1)
但是它仅显示报告表中记录的结果
并非完全正确-仅在reports.subject_id = '2'
处显示结果。如果报表表中没有匹配的行,则subject_id将为null,并且null不等于2。
您需要在join子句中而不是where子句中为report表指定谓词,以获取所有学生:
select name, test, exam
from `reports`
right join `students`
on `reports`.`student_id` = `students`.`id`
and `reports`.`subject_id` = '2'
where `students`.`level_id` = '1'
答案 1 :(得分:0)
您可以尝试使用以下语句获取所有= 1级的学生
select name
, test
, exam
from students
join reports
on students.id = reports.student_id
and reports.subject_id = 2
where students.level_id = 1