with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
Nie możesz tego zrobić.
UPDATE
nie może odnosić się do terminu CTE w PostgreSQL, ponieważ CTE są materializowane. Nie są to tylko widoki podstawowych danych. (To czasami naprawdę denerwujące, ale tak właśnie jest).
Możesz:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
Jeśli chcesz; które będą działać na nowszych wersjach PostgreSQL, które obsługują automatycznie aktualizowane widoki. Myślę, że 9.2 ma.
W przeciwnym razie myślę, że chcesz coś takiego:
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 naprawdę proszę nie wywołaj warunki CTE cte
, cte1
itp. Nadaj im przydatne, opisowe nazwy, które powiedzą Ci, czym one są. To jak programy pełne zmiennych o nazwie a
przez x
... następna osoba, która będzie musiała zarządzać Twoim kodem, lub każda osoba, której poprosisz o pomoc, nie lubię to.