如何用单条SQL语句更新多行数据并合并多条UPDATE查询?
合并多条UPDATE语句为单条查询的方法
要把多条针对不同id的UPDATE合并成单条查询,不同数据库有不同的实现方式,以下是几种常用数据库的方案:
MySQL 方案
使用CASE WHEN语句根据id匹配对应的增量规则,同时通过WHERE限定更新范围,避免全表扫描:
UPDATE table SET col_1 = CASE id WHEN 12 THEN col_1 + 5 WHEN 16 THEN col_1 + 2 -- 继续添加其他id的col_1增量规则 ELSE col_1 -- 未匹配到的id保持原数值 END, col_2 = CASE id WHEN 12 THEN col_2 + 7 WHEN 16 THEN col_2 + 6 -- 继续添加其他id的col_2增量规则 ELSE col_2 END WHERE id IN (12, 16, ...); -- 仅更新指定id的行
PostgreSQL 方案
可以通过FROM子句结合VALUES构造临时数据,关联原表进行批量更新:
UPDATE table t SET col_1 = t.col_1 + v.add_col1, col_2 = t.col_2 + v.add_col2 FROM ( VALUES (12, 5, 7), (16, 2, 6) -- 继续添加(id, col_1增量, col_2增量)的组合 ) AS v(id, add_col1, add_col2) WHERE t.id = v.id;
SQL Server 方案
类似PostgreSQL,使用JOIN关联临时构造的数据集实现批量更新:
UPDATE t SET col_1 = t.col_1 + v.add_col1, col_2 = t.col_2 + v.add_col2 FROM table t JOIN ( VALUES (12, 5, 7), (16, 2, 6) -- 继续添加其他id的增量组合 ) AS v(id, add_col1, add_col2) ON t.id = v.id;
注意事项
- 务必添加
WHERE条件(或关联条件),防止误更新无关行; CASE WHEN语句中必须包含ELSE分支,否则未匹配的行对应列会被设为NULL;- 不同数据库的语法细节有差异,需根据实际使用的数据库调整。
内容的提问来源于stack exchange,提问作者yahya
相关产品推荐
相关产品推荐

