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

nhận TẤT CẢ các con cấp cuối cùng (lá) từ một nút (truy vấn phân cấp Oracle 11G)

Tôi nghĩ, một cái gì đó như vậy nên thực hiện mẹo:

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH r.id_father IS NULL)
WHERE isleaf = 1

Nhân tiện, bạn có thể nhận được tất cả các lá mà không cần sử dụng truy vấn phân cấp. Chỉ cần chọn tất cả các nút, không phải là nút cha cho bất kỳ nút nào từ bảng quan hệ. Đại loại vậy:

SELECT n.* FROM NODES n
WHERE NOT EXISTS (SELECT ID_FATHER FROM RELATION r
                  WHERE r.id_father = n.id)

Để lấy các nút lá từ nút được chỉ định, chỉ cần thay đổi điều kiện trong mệnh đề BẮT ĐẦU VỚI, để bắt đầu đảo ngược cây từ nút mà bạn quan tâm. Ví dụ:truy vấn này sẽ trả về cho bạn tất cả các lá con của nút có id =5 :

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH n.id = 5)
WHERE isleaf = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm ngày vào dấu thời gian

  2. Cách tạo mảng liên kết trong cơ sở dữ liệu Oracle

  3. Cách đặt thuộc tính kết nối (bao gồm Từ đồng nghĩa)

  4. [A] Oracle.ManagedDataAccess.Client.OracleParameter không thể được truyền sang [B] Oracle.ManagedDataAccess.Client.OracleParameter

  5. java.sql.SQLException:ORA-01843:lỗi tháng không hợp lệ