sql >> Databasteknik >  >> RDS >> PostgreSQL

DELETE rekursiv 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);

Du måste sätta startpunkten i den initiala markeringen (inuti med) ELLER så måste du på något sätt göra en pseudokolumn som representerar toppen av "trädet", det är samma för varje rad i hela det trädet. Att sätta "toppen var" i det initiala valet inuti med är den enklaste lösningen.




  1. Fix Msg 8116 "Argumentdatatypen varchar är ogiltig för argument 1 för session_context-funktionen" i SQL Server

  2. Cloud Vendor Deep-Dive:PostgreSQL på DigitalOcean

  3. SQLite JSON_REMOVE()

  4. PDO exekvera array till sträng konverteringsfel