PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL:cara memperbarui baris di CTE

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Catatan yang dikembalikan dari fungsi memiliki kolom yang digabungkan

  2. PostgreSQL, kueri kompleks untuk menghitung bahan berdasarkan resep

  3. Apakah lebih baik membuat indeks sebelum mengisi tabel dengan data, atau setelah data ada?

  4. mengakses elemen array komposit plpgsql

  5. Kesalahan:Anda harus menginstal setidaknya satu paket postgresql-client-<version>