使用含子查询的UPDATE SQL语句关联EMP1表更新EMP表的金额字段
问题说明
现有两张关系数据表,信息如下:
表1:EMP(目标更新表)
初始结构及数据:
ID NAME CITY AMT ------------------------------------------- 1 sajani Bangalore 0 2 Prashanth Bangalore 0 3 Jayvin Bangalore 0
表2:EMP1(数据源表)
结构及数据:
ID NAME1 CITY1 AMT1 --------------------------------------------- 1 Sajani Bangalore 10 1 Sajani Bangalore 10 2 Prashanth Bangalore 10 3 Jayvin Bangalore 10
需求
两张表以ID作为公共关联键,编写UPDATE SQL语句,将EMP表的AMT字段更新为EMP1表中相同ID对应的所有AMT1的总和,最终预期结果如下:
ID NAME CITY AMT -------------------------------------------- 1 sajani Bangalore 20 2 Prashanth Bangalore 10 3 Jayvin Bangalore 10
实现代码
通用写法(兼容绝大多数数据库)
通过关联子查询逐行计算对应ID的AMT1总和赋值:
UPDATE EMP SET AMT = ( SELECT SUM(AMT1) FROM EMP1 WHERE EMP1.ID = EMP.ID );
高性能写法(支持JOIN更新的数据库可使用,如MySQL、PostgreSQL)
先对EMP1按ID聚合求和,再关联更新EMP表,数据量大时性能更优:
UPDATE EMP e INNER JOIN ( SELECT ID, SUM(AMT1) AS total_amt FROM EMP1 GROUP BY ID ) emp1_total ON e.ID = emp1_total.ID SET e.AMT = emp1_total.total_amt;
内容的提问来源于stack exchange,提问作者sajani kp
相关产品推荐
相关产品推荐

