PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

DELETE đệ quy 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);

Bạn phải đặt điểm bắt đầu trong lựa chọn ban đầu (bên trong với) HOẶC bạn phải bằng cách nào đó tạo một cột giả đại diện cho phần trên cùng của "cây", điều này giống nhau đối với mọi hàng trong toàn bộ cây đó. Đặt "top where" trong lựa chọn ban đầu bên trong với là giải pháp dễ dàng hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhóm các khoảng thời gian liên tiếp theo sql

  2. Chuỗi phân tách với split_part bằng ngôn ngữ Châu Á

  3. Làm cách nào để bỏ tất cả các bảng trong cơ sở dữ liệu PostgreSQL?

  4. Tìm khoảng trống của một chuỗi trong SQL mà không cần tạo bảng bổ sung

  5. PostgreSQL:Vi phạm duy nhất:7 LỖI:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất users_pkey