操纵&使用UPDATE的结果....返回

时间:2013-06-07 18:24:55

标签: postgresql common-table-expression

这是一个返回一些数据的简单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

或者我是否必须将返回的结果保存到我的应用程序中,然后从返回的结果中创建一个新查询?

2 个答案:

答案 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中执行所有操作,您可以安全地存储和处理查询结果,这样您只需从应用程序中进行一次数据库调用。