PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

USUŃ rekurencyjny PostgreSQL

WITH RECURSIVE all_uploads (codigo, parent, ext, main) AS (
 SELECT ut1.codigo, ut1.codigo_upload_temp_pai AS parent,
  ut1.codigo_extensao AS ext, ut1.codigo AS main
 FROM upload_temp ut1
 WHERE ut1.codigo = 486

 UNION ALL

SELECT ut2.codigo, ut2.codigo_upload_temp_pai AS parent,
 ut2.codigo_extensao AS ext, au.main
FROM upload_temp ut2
JOIN all_uploads au ON au.parent = ut2.codigo
)
DELETE FROM upload_temp WHERE codigo IN (SELECT codigo FROM all_uploads);

Musisz umieścić punkt początkowy w początkowym zaznaczeniu (wewnątrz z) LUB musisz jakoś stworzyć pseudokolumnę reprezentującą wierzchołek „drzewa”, która jest taka sama dla każdego wiersza w tym całym drzewie. Umieszczenie „góry gdzie” w początkowym wyborze wewnątrz z jest łatwiejszym rozwiązaniem.




  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, niestandardowe agregaty

  2. Wymień wszystkie sekwencje w Postgres db 8.1 z SQL

  3. Użyj wielu konfliktów_docelowych w klauzuli ON CONFLICT

  4. ActiveRecord - wybierz pierwszy rekord z każdej grupy

  5. Powszechny sposób porównywania znaczników czasu w Oracle, PostgreSQL i SQL Server