0

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

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

4

2 回答 2

4

从 9.1 版开始,您可以UPDATE ... RETURNING"Common Table Expression" ("CTE")中使用 an,在大多数情况下,可以将其视为命名子查询。

因此,出于您的目的,您可以使用以下内容:

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

如果您使用的是低于 9.1 的 Postgres 版本,那么我认为您将不得不将结果抓取到一些程序代码中的变量中——您的应用程序或数据库函数(可能用PL/pgSQL编写)。

于 2013-06-07T18:52:02.113 回答
0

That syntax won't work (unfortunately! that would be convenient).

Either you update and then create another query, or you do everything in a stored procedure where you can safely store and handle query resuts, so that you just have one single database call from your application.

于 2013-06-07T18:44:24.670 回答