我需要进行查询以获得每个学生的特定考试成绩,并且我还想为没有输入成绩的学生显示NULL ....
这是我的四个表
Student
表Scores
表Student
student_subject
我的表格链接
带学生表(user_id)的student_subject(user_id)
带有考试表(group_id)的student_subject(group_id)(由于某些重要原因,我的组数据库在另一个数据库中)
我的查询有效,但对于没有输入分数的学生,我没有NULL值
SELECT
scores.result, students.id, exam.name, exam.id
FROM
scores
LEFT JOIN
students ON scores.user_id = students.user_id
LEFT JOIN
exam ON exam.id = scores.exam_id
LEFT JOIN
students_subjects as ss ON ss.user_id = students.id
LEFT JOIN
students_subjects ON students_subjects.group_id = exam.group_id
WHERE
exam.id = 32
GROUP BY
scores.id
输出
如何为每个没有特定考试成绩的学生(exam.id = 32)获取空值?
为@sceaj编辑
我得到了你的查询(我更改WHERE exam.id = 34 for WHERE exam.id = 36 for better testing)
SELECT scores.result,students.id,exam.name, exam.id
FROM exam
INNER JOIN students_subjects ON students_subjects.group_id = exam.group_id
INNER JOIN students ON students_subjects.user_id = students.user_id
LEFT OUTER JOIN scores ON scores.user_id = students.user_id
WHERE exam.id = 36
答案 0 :(得分:2)
以下内容应该返回所有学生,如果他们存在,则从考试32中得分。
SELECT scores.result,students.id,exam.name, exam.id
FROM exam
INNER JOIN scores ON exam.id = scores.exam_id
RIGHT OUTER JOIN students ON scores.user_id = students.user_id
WHERE exam.id = 32
你的select子句没有使用students_subjects或聚合函数中的任何东西,所以我不确定它的连接是什么?也许你可以从上面开始并从那里开始构建。
编辑:基于我的第一条评论的新策略。尝试找到所有学生,然后找到存在的分数,如果没有则为空。
SELECT scores.result,students.id,exam.name, exam.id
FROM exam
INNER JOIN students_subjects ON students_subjects.group_id = exam.group_id
INNER JOIN students ON students_subjects.user_id = students.user_id
LEFT OUTER JOIN scores ON scores.user_id = students.user_id
AND scores.exam_id = exam.id
WHERE exam.id = 32
答案 1 :(得分:0)
不要从得分表开始,离开加入所有其他人:你只会获得得分不为空的行。相反,做一个正确的联接,或将得分表放在最后:
SELECT scores.result,students.id,exam.name, exam.id
FROM
students LEFT JOIN scores ON scores.user_id = students.user_id
LEFT JOIN exam on exam.id = scores.exam_id
LEFT JOIN students_subjects as ss ON ss.user_id = students.id
LEFT JOIN students_subjects ON students_subjects.group_id = exam.group_id
where exam.id = 32
group by scores.id