with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
それはできません。
UPDATE
CTEが具体化されているため、PostgreSQLでCTE用語を参照しない場合があります。それらは、基礎となるデータの単なるビューではありません。 (それは時々本当に迷惑ですが、それはそうです)
次のことができます:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
お望みならば;これは、自動的に更新可能なビューをサポートする新しいPostgreSQLバージョンで機能します。 9.2はそうだと思います。
それ以外の場合は、次のようなものが必要だと思います:
WITH cte1 as (
select ..... from bTable inner join cte using(anID)
)
update aTable
set aField=(select somthing from cte1)
WHERE ... where clause from cte ...
RETURNING *;
しかし、実際には、しないでください CTE用語をcte
と呼びます 、cte1
など。それらが何であるかを示す、有用でわかりやすい名前を付けます。これは、a
という名前の変数でいっぱいのプログラムのようなものです。 x
を介して ...あなたのコードを維持しなければならない次の人、またはあなたが助けを求める人は、しません。 いいね。