用其他表中的值更新表. 如何获取更新前后的值? 已try

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

但在回报中

新的,新的

如何获得

旧,新

结果呢?

推荐答案

manual explains名:

可选的RETURNING子句使UPDATE根据实际更新的每一行计算并返回值(S).可以计算使用表的列和/或在中提到的其他表的列的任何表达式.使用表列的新(更新后)值.返回列表的语法与 Select 的输出列表的语法相同.

因此,要获得"old2"值,表必须在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
testvalue testvalue
old new
UPDATE 1

fiddle

Sql相关问答推荐

SQL—如何在搜索的元素之后和之前获取元素?

如何嵌套两条SQL语句

如何在SQL Server中统计按备注分组的记录数

如何将我的联接数据放入每个用户每月多行的列中?

返回UPSERT中的旧行值

Pgsql-返回包含多行数据的行

Oracle中的时间戳

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

在特定条件下使用 LAG,确定要采用什么 LAG 值?

如何解释 SQL Server 中的 Foxpro 语法?

创建具有多个子查询的 SQL 视图

将空 JSON 数组添加到 SQL Server 表列中的 JSON 字符串

snowflake中的动态文件名生成

在没有订单的情况下,如何生成一个值为0的顾客天数行

更新之前如何获得价值

如何将输出转换为二维格式?

MIN MAX 值与条件绑定

Oracle SQL 从多个条件中 Select 但具有相同的 id

在 Athena / Presto 中提取 JSON 对象以获取动态密钥

如何使用子查询锁定此查询中的选定行?