You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:17:39