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

PostgreSQL中如何用同表不同行值更新列并修改键名

PostgreSQL适配解决方案

需求与表结构

当前表结构:

idKeyValue
1property1value11
1oldvalueoValue1
1newvaluenValue1
2property1value12
2oldvalueoValue2
2newvaluenValue2
3property1value13
3oldvalueoValue3
3newvaluenValue3

新增Previous Value列后,目标表结构:

idKeyValuePrevious Value
1property1value11null
1valuenValue1oValue1
2property1value12null
2valuenValue2oValue2
3property1value13null
3valuenValue3oValue3

需要完成的操作:

  • 将同id下oldvalue键的Value复制到newvalue键的Previous Value列(仅对存在oldvalue的id执行)
  • 将所有newvalue键改为value

适配PostgreSQL的SQL语句

1. 更新Previous Value列

PostgreSQL的UPDATE关联语法与SQL Server不同,需要使用UPDATE ... FROM的标准写法,同时注意字段名包含空格/大写时,必须用双引号包裹:

UPDATE PROPERTIES_TABLE t1
SET "Previous Value" = t2."Value"
FROM PROPERTIES_TABLE t2
WHERE t1.id = t2.id
  AND t1."Key" = 'newvalue'
  AND t2."Key" = 'oldvalue';

2. 修改Key值

这一步语句与SQL Server兼容,直接执行即可:

UPDATE PROPERTIES_TABLE
SET "Key" = 'value'
WHERE "Key" = 'newvalue';

注意事项

  • 必须先执行更新Previous Value的语句,再修改Key值,否则修改Key后无法匹配到newvalue的行,导致更新失败。
  • 如果你的字段名是全小写且无空格(比如previous_value、key、value),可以去掉双引号,PostgreSQL会自动识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:30:57