with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
To nemůžete.
UPDATE
nemusí odkazovat na termín CTE v PostgreSQL, protože CTE jsou materializované. Nejsou to jen pohledy na základní data. (To je někdy opravdu nepříjemné, ale je to tak).
Můžete:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
jestli chceš; to bude fungovat na novějších verzích PostgreSQL, které podporují automaticky aktualizovatelná zobrazení. Myslím, že 9.2 ano.
Jinak si myslím, že chcete něco jako:
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 *;
ale opravdu to prosím nedělej nazvěte své CTE výrazy cte
, cte1
, atd. Dejte jim užitečná, popisná jména, která vám řeknou, co to je. Je to jako programy plné proměnných s názvem a
až x
... další osoba, která musí udržovat váš kód, nebo kdokoli, koho požádáte o pomoc, nebude líbí.