我有下表:
学科
id int(11) AUTO_INCREMENT
name var_char(50)
speciality int(11) -- The ID of the speciality
成绩
id int(11) AUTO_INCREMENT
student_id int(11) -- the ID of the student from `students` table
discipline_id int(11) -- the ID of the discipline from `disciplines` table
grade int(2)
假设我有两个变量:一个变量持有学生的ID,另一个变量持有专业的ID。
我需要做的是创建一个查询,该查询返回一个包含两列的表:discipline
和grade
。 discipline
列应具有将在给定专业中学习的所有学科,而grade
列应显示该学生对该学科的评分(来自给定变量)。
规则:
-该学生在一门学科的成绩可能不止一个(因为成绩表中有多行)
-学生可能没有一门学科的任何成绩。在这种情况下,结果中的grades
列应将NULL
显示为结果
示例结果:
discipline | grade
-------------|------------
Math | 2
Math | 2
Math | 3
Programming | 4
DB Basics | NULL
and so on... |
-------------------------
是否可以通过一个查询做到这一点?
编辑: 我试图做这样的事情:
SELECT disciplines.name, grades.grade
FROM disciplines
INNER JOIN grades ON grades.discipline_id = disciplines.id
WHERE disciplines.speciality = 3 AND grades.student_id = 97
这里的问题是,我没有同一专业的其他学科,而该学生还没有任何成绩。
答案 0 :(得分:0)
select disciplines.name as discipline ,grades.grade
from grades
join disciplines on grades.discipline_id = disciplines.id
where grade.student_id='123'
and disciplines.speciality = '234';
不必尝试,所以希望它是正确的:P
答案 1 :(得分:0)
只需使用LEFT JOIN
而不是INNER JOIN
,以便在尚未评分的学科中显示NULL
,并将条件放在那里的学生证上,以便不仅限于具有值的行:
SELECT disciplines.name, grades.grade
FROM disciplines
LEFT JOIN grades ON grades.discipline_id = disciplines.id AND grades.student_id = 97
WHERE disciplines.speciality = 3