我无法在我的SQL查询中使用连接返回所有值,我做错了什么?

时间:2014-08-11 01:24:27

标签: sql sql-server tsql

我有三个表 - 分配,成绩,学生和我正在努力使这个查询工作,即使没有为学生输入成绩,它也会返回所有作业。

表格设置如下

分配

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;

当我运行查询时,我得到了我需要的所有名字,但我没有得到所有的分配。我应该得到所有的名字,所有的作业,如果作业还没有评分,那么应该返回一个空值。

我需要一点方向,也许我的桌子设置不正确。

1 个答案:

答案 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;