postgresql 如何在更新前获取值[重复]

30byixjq  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(184)

此问题已在此处有答案

Return pre-UPDATE column values using SQL only(4个答案)
3天前关闭。
使用其他表的值更新表。如何获取更新前后的值?试过了

CREATE temp table change ( id integer, testvalue varchar );
insert into change values (1, 'old' );

CREATE temp table newvalue ( id integer, testvalue varchar );
insert into newvalue  values (1, 'new' );

update change set testvalue =newvalue.testvalue
from newvalue
 where change.id=newvalue.id
returning change.testvalue, newvalue.testvalue

但作为回报
新的,新的
如何获得
旧的,新的
结果?

brtdzjyr

brtdzjyr1#

manual explains
可选的RETURNING子句使UPDATE根据实际更新的每一行计算并返回值。使用表的列和/或FROM中提到的其他表的列的任何表达式都可以被计算。将使用表列的新(更新后)值。RETURNING列表的语法与SELECT的输出列表的语法相同。
因此,要获取“old 2值,表必须位于FROM子句中,如

CREATE temp table change ( id integer, testvalue varchar );
insert into change values (1, 'old' );

CREATE temp table newvalue ( id integer, testvalue varchar );
insert into newvalue  values (1, 'new' );

update change set testvalue =newvalue.testvalue
from change c1 JOIN newvalue ON c1.id=newvalue.id
 where change.id=newvalue.id 
returning c1.testvalue, newvalue.testvalue
CREATE TABLE
INSERT 0 1
CREATE TABLE
INSERT 0 1

| 测试值|测试值|
| - -----|- -----|
| 旧的|新的|

UPDATE 1

fiddle

相关问题