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);
Трябва да поставите началната точка в първоначалния избор (вътре в with) ИЛИ трябва по някакъв начин да направите псевдоколона, която представлява върха на "дървото", което е същото за всеки ред в цялото дърво. Поставянето на "top where" в първоначалния избор вътре в with е по-лесното решение.