with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
Det kan du ikke.
En UPDATE
refererer muligvis ikke til et CTE-udtryk i PostgreSQL, da CTE'er bliver til. De er ikke kun visninger af de underliggende data. (Det er nogle gange virkelig irriterende, men sådan er det).
Du kan:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
Hvis du vil; der fungerer på nyere PostgreSQL-versioner, der understøtter automatisk opdateringsmuligheder. Det tror jeg, 9.2 gør.
Ellers tror jeg, du vil have noget som:
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 *;
men virkelig, lad være kald dine CTE-vilkår cte
, cte1
osv. Giv dem brugbare, beskrivende navne, der fortæller dig, hvad de er. Det er ligesom programmer fulde af variabler ved navn a
gennem x
... den næste person, der skal vedligeholde din kode, eller nogen du beder om hjælp, vil ikke kan lide det.