PostgreSQL表更新:按行原值乘常量更新符合条件的数值列
如何在PostgreSQL中逐行独立更新数值列
嘿,你想实现的操作其实特别简单,PostgreSQL的UPDATE语句默认就是逐行用自身原有值计算的,你只差一点点语法小调整而已!
正确的SQL写法
你之前的语句里用了TO,但PostgreSQL的UPDATE赋值是用=的,修正后的语句是这样:
UPDATE your_table SET target_column = target_column * your_constant WHERE identifier_column = some_number;
举个直观的例子
比如你有个orders表,里面有amount(金额列,数值类型)和user_id列,现在要把用户ID为100的所有订单金额乘以0.9(打9折),执行这个语句就行:
UPDATE orders SET amount = amount * 0.9 WHERE user_id = 100;
执行的时候,每一行符合条件的amount都会用自己原来的数值去乘0.9——比如原来金额是200的会变成180,原来金额是50的会变成45,完全是独立计算,绝不会把某一行的结果统一套给所有行。
为啥不会出现统一赋值的问题?
PostgreSQL处理UPDATE的逻辑是逐行来的:对于每一条符合WHERE条件的行,它会先读取该行当前的target_column值,代入target_column * your_constant这个表达式算出新值,然后再把新值写回该行。这个过程是每行独立完成的,完全不需要额外配置。
要是你担心计算逻辑不对,还可以先跑个SELECT预览结果:
SELECT target_column, target_column * your_constant AS new_value FROM your_table WHERE identifier_column = some_number;
先确认每一行的原有值和计算后的新值符合预期,再执行UPDATE就稳了。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

