SQL Server中关联多表、带有聚合函数的更新(Update)语句

最近忙于公司产品和项目,很久没有写博客了,碰巧今天遇上一个问题,纠结了比较久,在网上搜索了一些资料最终得出解决方案。

业务场景如下:

考生表tblUser:

标识列(Id) 姓名(Name) 总分(TotalScore)
1 张三 NULL
2 李四 NULL
3 王五 NULL

得分表tblScore:

考生标识列(UserId) 姓名(Name) 科目(Subject) 得分(Score)
1 张三 数学 86
1 张三 语文 99
2 李四 数学 98
2 李四 语文 85
3 王五 数学 59
3 王五 语文 51

我们需要使用SUM()GROUP BY把附表中的总分累加起来,赋值给主表中的总分。

  1. 先查询考生表中的数据,遍历所有考生,将考生总分查询出来,单条更新到考生表中。此方法执行效率很低下,遍历过程中会有N次数据库连接。

  2. 在UPDATE语句中使用SUM()聚合函数,代码如下:

sql
UPDATE tblUserSET TotalScore=temp.AllScoreFROM (    SELECT SUM(s.Score) AllScore,s.UserId    FROM tblScore AS s    GROUP BY s.UserId) temp, tblUserWHERE temp.UserId=tblUser.Id

执行成功!

← 返回 Note