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")で を使用できます。これは、ほとんどの目的で、名前付きサブクエリと考えることができます。

したがって、目的のために、次のようなものを使用できます。

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で記述) のいずれかの手続き型コードで結果を変数に取り込む必要があると思います。

于 2013-06-07T18:52:02.113 に答える