with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
Anda tidak bisa melakukan itu.
Sebuah UPDATE
mungkin tidak merujuk istilah CTE di PostgreSQL, karena CTE terwujud. Mereka bukan hanya pandangan atas data yang mendasarinya. (Itu terkadang sangat menyebalkan, tapi begitulah adanya).
Anda dapat:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
jika kamu mau; yang akan berfungsi pada versi PostgreSQL yang lebih baru yang mendukung tampilan yang dapat diperbarui secara otomatis. Saya rasa 9.2 bisa.
Jika tidak, saya pikir Anda menginginkan sesuatu seperti:
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 *;
tapi sungguh, tolong jangan panggil istilah CTE Anda cte
, cte1
, dll. Beri mereka nama deskriptif yang berguna yang memberi tahu Anda siapa mereka. Ini seperti program yang penuh dengan variabel bernama a
melalui x
... orang berikutnya yang harus menjaga kode Anda, atau siapa pun yang Anda minta bantuan, tidak suka.