MSSQL如何按关联条件将一个表的数据更新到另一张表
关联表更新语法实现
你需要的关联更新逻辑确实需要通过JOIN实现,不同主流数据库的语法略有差异,以下是可直接使用的实现方案:
MySQL 写法
UPDATE table_a a INNER JOIN table_b b ON a.id = b.id SET a.col1 = b.col1, a.col2 = b.col2;
PostgreSQL / SQL Server 写法
UPDATE table_a a SET col1 = b.col1, col2 = b.col2 FROM table_b b WHERE a.id = b.id;
全数据库兼容写法
适配所有关系型数据库,无需考虑数据库语法差异,仅性能略低于JOIN写法,适合小数据量场景:
UPDATE table_a SET col1 = (SELECT col1 FROM table_b WHERE table_b.id = table_a.id), col2 = (SELECT col2 FROM table_b WHERE table_b.id = table_a.id) WHERE EXISTS ( SELECT 1 FROM table_b WHERE table_b.id = table_a.id );
重要提醒:上述兼容写法必须保留最后的EXISTS条件,否则table_a中不存在table_b匹配id的行,对应col1、col2会被覆盖为NULL,引发数据异常。
- 如需增加过滤条件仅更新部分行,直接在对应语法的WHERE子句中补充规则即可,比如仅更新table_b中status为1的匹配行,补充
AND b.status = 1即可。
内容的提问来源于stack exchange,提问作者Sam Eklund
相关产品推荐
相关产品推荐

