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

PostgreSQL 13中同一UPDATE语句内字段计算结果是否可复用?

PostgreSQL 13 UPDATE语句中字段计算结果复用问题

在PostgreSQL 13的同一条UPDATE语句里,无法复用SET子句中刚更新的字段计算结果。所有SET子句里的字段计算,都是基于该行更新前的原始数据,而非刚设置的新值。比如你给出的示例代码:

UPDATE table
SET
  sum_col = col_1 + col_2,
  another_sum_col = sum_col + col_3;

这里another_sum_col用到的sum_col是更新前的旧值,不是刚计算出来的col_1+col_2,这就是你遇到数据差异的核心原因。

不需要执行第二次UPDATE,有两种更高效的解决方式:

  • 重复计算逻辑:把sum_col的计算式直接代入another_sum_col的计算中,适合逻辑简单的场景:
UPDATE table
SET
  sum_col = col_1 + col_2,
  another_sum_col = (col_1 + col_2) + col_3;
  • 用CTE预计算值:如果业务逻辑复杂,为避免重复写计算式,可以先用CTE算出所有需要的新值,再一次性更新,结果更准确也更清晰:
WITH updated_vals AS (
  SELECT
    id, -- 假设表有主键id用于关联
    col_1 + col_2 AS new_sum_col,
    (col_1 + col_2) + col_3 AS new_another_sum_col
  FROM table
  -- 可添加WHERE条件过滤需要更新的行
)
UPDATE table t
SET
  sum_col = uv.new_sum_col,
  another_sum_col = uv.new_another_sum_col
FROM updated_vals uv
WHERE t.id = uv.id;

内容的提问来源于stack exchange,提问作者strumpy_strudel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:02