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

Menggunakan fungsi jendela dalam pernyataan pembaruan

Kesalahannya dari postgres bukan Django. Anda dapat menulis ulang ini sebagai:

WITH v_table_name AS
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) 
UPDATE table_name set table_name.col1 = v_table_name.rn
FROM v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;  

Atau sebagai alternatif:

UPDATE table_name set table_name.col1 = v_table_name.rn
FROM  
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) AS v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;

Ini bekerja. Baru saja mengujinya di postgres-9.6. Berikut adalah sintaks untuk UPDATE (lihat dari daftar opsional ).

Semoga membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku psql:FATAL:slot koneksi yang tersisa dicadangkan untuk koneksi superuser non-replikasi

  2. Instalasi postgresql dengan NSIS

  3. Perbarui beberapa baris dalam kueri yang sama menggunakan PostgreSQL

  4. Cara Membuat Pengguna Hanya Baca di PostgreSQL

  5. Kueri rekursif yang digunakan untuk penutupan transitif