【发布时间】:2021-03-31 10:29:08
【问题描述】:
我有 3 张桌子:
- 具有以下列的学生:Id(pk)、FirstName、LastName、BirthDate、GroupId(fk);
- 主题包含以下列:Id(pk)、名称;
- Student_Grade_Subject 包含以下列:StudentId、SubjectId(composed pk)、Grade(int);
所以我的问题是,返回每个学生成绩平均值的查询看起来如何?我知道我必须进行外部联接,因为并非所有学生都有成绩。
这是我迄今为止尝试过的,但我得到“OUTER 附近的语法不正确”。
select s.Id, MEAN(Grade) from dbo.Student s , dbo.Student_Grade_Subject
sgs LEFT [OUTER] JOIN dbo.Student_Grade_Subject on s.id =
sgs.StudentId group by s.Id;
【问题讨论】:
-
语法图中的方括号表示语法的可选元素。从实际查询中删除它们。
-
不要使用旧式连接,也不要将旧式连接与更合适的 JOIN 语法混合使用。
-
更合适的JOIN语法是什么?
-
一个 ANSI-92
INNER JOIN或CROSS JOIN(这就是你在这里所拥有的)。 -
您在 Student_Grade_Subject 和 Student_Grade_Subject 之间使用了旧式联接,同时又将 JOIN 与 Student_Grade_Subject 一起使用。重来。为您的表格提供简短而有意义的别名 - 所有表格都应该有它们,而不仅仅是其中的一些。您正在学习坏习惯并助长自己(和他人)的困惑。
标签: sql sql-server join left-join