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

ИЗТРИВАНЕ на рекурсивен 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);

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при инсталиране на Psycopg2 на MacOS 10.9.5

  2. Не правете нищо в процедура за задействане

  3. Как да премахнете последващите нули от десетичен знак в PostgreSQL

  4. Извадете седмици от дата в PostgreSQL

  5. Разлика в производителността:условието е поставено в клауза INNER JOIN спрямо WHERE