DB2中如何用另一张表的最大值更新本表字段?
解决SQL更新单位最大里程的问题
原SQL的问题在于多做了一次不必要的Table B关联,不仅逻辑冗余,还可能引发数据库解析错误(也就是你遇到的104无效令牌),同时这种写法会导致同一单位匹配多条B表数据,造成更新逻辑混乱。
直接用分组聚合后的结果和Table A关联即可,以下是修正后的写法:
MySQL版本
UPDATE A JOIN ( SELECT unit, MAX(mileage) AS max_mil FROM B GROUP BY unit ) AS max_table ON A.unit = max_table.unit SET A.mileage = max_table.max_mil;
支持UPDATE...FROM的数据库版本(如PostgreSQL、SQL Server)
UPDATE A SET mileage = max_table.max_mil FROM ( SELECT unit, MAX(mileage) AS max_mil FROM B GROUP BY unit ) AS max_table WHERE A.unit = max_table.unit;
说明
直接基于Table B的分组结果(按unit取最大里程)和A表关联,既避免了冗余的表连接、提升了执行效率,也解决了语法解析错误的问题,能准确将A表的mileage字段更新为对应单位在B表中的最大里程值。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

