sql >> Base de Datos >  >> RDS >> PostgreSQL

ELIMINAR PostgreSQL recursivo

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

Tienes que poner el punto de inicio en la selección inicial (dentro del con) O tienes que hacer de alguna manera una pseudocolumna que represente la parte superior del "árbol", que es lo mismo para cada fila en todo el árbol. Poner el "arriba donde" en la selección inicial dentro del con es la solución más fácil.