我有三个表 - 分配,成绩,学生和我正在努力使这个查询工作,即使没有为学生输入成绩,它也会返回所有作业。
表格设置如下
分配
AssignmentId, AssignmentName, PointsPossible
等级(交汇表)
StudentId, AssignmentId, PointsReceived
学生
StudentId, StudentName
我的查询:
select
s.StudentName, a.AssignmentName, g.PointsReceived, a.PointsPossible
from
student s
cross join
assignment a
left outer join
grades g on s.StudentId = g.StudentId and g.AssignmentId = a.AssignmentId
order by
s.StudentName;
当我运行查询时,我得到了我需要的所有名字,但我没有得到所有的分配。我应该得到所有的名字,所有的作业,如果作业还没有评分,那么应该返回一个空值。
我需要一点方向,也许我的桌子设置不正确。
答案 0 :(得分:1)
即使没有成绩,您还需要完成所有作业吗?显而易见的问题是:如果没有联结表,您如何知道为每个学生提供哪些作业?
所以,让我猜你想要获得所有学生和所有作业的交叉产品,以及成绩(如果有的话)。如果是这样,您希望构建您的查询,如下所示:
select s.StudentName, a.AssignmentName, a.PointsPossible, g.PointsReceived
from students s cross join
assignments a left outer join
grades g
on g.StudentId = a.StudentId and g.AssignmentId = a.AssignmentId;
order by s.StudentName;