这是一个返回一些数据的简单PostgreSQL更新:
UPDATE table set num = num + 1
WHERE condition = true
RETURNING table.id, table.num
有没有办法进一步使用返回的结果,好像它们来自select语句?像这样:
INSERT into stats
(id, completed)
SELECT c.id, TRUE
FROM
(
UPDATE table set num = num + 1
WHERE condition = true
RETURNING table.id, table.num
) c
where c.num > 5
或者我是否必须将返回的结果保存到我的应用程序中,然后从返回的结果中创建一个新查询?
答案 0 :(得分:4)
从版本9.1开始,您可以在"Common Table Expression" ("CTE")中使用UPDATE ... RETURNING
,对于大多数用途,可以将其视为已命名的子查询。
因此,出于您的目的,您可以使用以下内容:
WITH update_result AS
(
UPDATE table set num = num + 1
WHERE condition = true
RETURNING table.id, table.num
)
INSERT into stats
(id, completed)
SELECT c.id, TRUE
FROM update_result as c
WHERE c.num > 5
如果您使用的Postgres版本低于9.1,那么我认为您必须将结果导入某些过程代码中的变量 - 您的应用程序或数据库函数(可能用PL/pgSQL编写) )。
答案 1 :(得分:0)
该语法不起作用(不幸的是!这很方便)。
您可以更新然后创建另一个查询,或者在stored procedure
中执行所有操作,您可以安全地存储和处理查询结果,这样您只需从应用程序中进行一次数据库调用。