PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на прозоречни функции в изявление за актуализиране

Грешката е от postgres, а не от django. Можете да пренапишете това като:

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;  

Или алтернативно:

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;

Това работи. Току-що го тествах на postgres-9.6. Ето синтаксиса за UPDATE (вижте незадължителния от списък ).

Надявам се това да помогне.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверя дали тригерът съществува в PostgreSQL?

  2. Задействане с име на динамично поле

  3. Настройка и поддръжка на PostgreSQL репликация с помощта на Ansible

  4. Грешка при инсталиране на psycopg2==2.6.2

  5. PostgreSQL неправилно сортиране