我有两张table:
表1
Date Name StudentID TotalDuration
------------------------------------------------------------
2019-09-30 aA 11111 100
2019-09-30 bB 22222 40
2019-09-30 cC 33333 60
2019-10-07 aA 11111 50
2019-10-07 bB 22222 10
2019-10-07 cC 33333 12
2019-10-07 dD 44444 90
它包含参加讲座的学生的数据(因此,不包括未参加讲座的学生)。
表2
StudentID Surname FirstName Group
------------------------------------------------------------
11111 A a 1
22222 B b 1
33333 C c 1
44444 D d 2
55555 E e 2
66666 F f 2
77777 G g 3
表2包含了班上所有学生的数据。
表1中的name属性是姓+名的组合,totalduration是学生参与的持续时间(分钟)。
我想把这两个表格合并起来,这样它就列出了班上所有的学生和他们的总学时。
我试过了 OUTER JOIN
以及 UNION ALL
,但无法计算如何列出所有学生,但对于在特定日期未参加讲座的学生,显示空值。
我怎样才能做到这一点?
2条答案
按热度按时间9vw9lbht1#
您可能希望通过
StudentID
并使用LEFT JOIN
,例如:注意分组方式
a.FirstName
以及a.Surname
(假设StudentId
是主键)根据sql标准是可选的。不过,我不确定SQLServer是否需要它。xqnpmsa82#
你可以的
left join
以及group by
. 但是,由于您只需要一个聚合计算,因此相关子查询可能是一种更简单、更有效的方法(如果您有合适的索引,请参见下面的内容):对于性能,请考虑
table1(studentid, totalduration)
.旁注:从数据库设计的Angular 来看,列
Name
在table1
只是不需要;这是大量的信息,使维护任务复杂化(如果有人在另一个表中更改studend的名字怎么办?)。您应该删除该列,并依赖于上的外键studentid
只是。