【发布时间】:2020-02-27 22:06:24
【问题描述】:
我的数据库中有三个表。第一个是以 student_id 作为主键的学生。第二个是以 course_id 作为主键的课程表,最后我有一个以 id_student 和 id_course 作为外键的成绩表,以及一个成绩字段。我想获取成绩表中缺少成绩的学生的详细信息。 我搜索了堆栈溢出,但找不到我正在寻找的确切答案。到目前为止,我尝试过的是以下查询:
select st.student_id,
st.lname,
st.fname,
cs.course_id,
g.grade
from students st
join grades g
on g.id_student = st.student_id
join courses cs
on cs.course_id = g.id_course
where g.grade is null
如果我在没有 where 条件的情况下尝试相同的查询,我会得到 39 行,但我应该得到 40 行,因为在我的数据库中有一个学生在 course_id 20 中缺少成绩。 ** 缺少的是 student_id,其中 course_id 为 20,并且不存在成绩。**
【问题讨论】:
-
将您的 JOINS 更改为 LEFT OUTER JOIN
-
我猜它的连接子句,你的第 40 个学生可能在其中一个表中丢失了一条记录。如果你没有指定
join'默认是一个内连接,尝试使用left join。但是,我们需要一些样本数据和样本输出来验证确切的原因。这是你的一次很好的尝试 -
@AntDC
select st.student_id,st.lname,st.fname,cs.course_id,g.grade from students st LEFT OUTER join grades g on g.id_student = st.student_id LEFT OUTER join courses cs on cs.course_id = g.id_course where g.grade is null我已经尝试过了,但仍然没有运气 -
有问题的学生没有成绩行,因此 WHERE 子句将他排除在外 - 已修改我的答案以包含可能的解决方案。
-
请提供样本数据以及期望的结果。你怎么知道哪些学生应该选修哪些课程?
标签: sql sql-server