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
... следващият човек, който трябва да поддържа вашия код, или всеки, когото помолите за помощ, не ще го направи харесвам го.