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

PostgreSQL:将两列乘积写入新列的UPDATE语句执行卡死求助

问题排查与解决方法

问题原因

你编写的UPDATE语句没有关联主表test2和子查询total的匹配条件,导致数据库执行时产生笛卡尔积:主表的每一行都会和子查询返回的所有行进行匹配,当表中数据量较大时,需要处理的计算量呈指数级增长,直接导致查询长时间无法完成。

解决方法

最简写法(推荐)

不需要使用子查询,直接在SET子句中计算同一行的两列乘积即可:

UPDATE test2 
SET jahresbeitrag = beitrag_netto * wert;

带关联条件的子查询写法(若需保留子查询逻辑)

如果必须通过子查询实现,一定要添加主表与子查询的关联条件(比如使用表的主键或唯一标识列,假设表主键为id):

UPDATE test2 t
SET jahresbeitrag = total.new
FROM (SELECT id, beitrag_netto * wert AS new FROM test2) AS total
WHERE t.id = total.id;

验证效果

执行正确语句后,jahresbeitrag列会被正确赋值为对应行beitrag_netto与wert的乘积,和你预期的结果一致:

beitrag_nettowertjahresbeitrag
54.32108.6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:39:18