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

Hệ thống phân cấp đầy đủ của Oracle SQL được cung cấp bất kỳ nút nào làm đầu vào

Nếu bạn muốn sử dụng nó làm dạng xem, bạn có thể làm như sau:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
  FROM rek startItem
  JOIN rek childItem
  USING (root_id)
-- WHERE startItem.id = 3 -- This would be done from outside the view

Truy vấn con rek kết nối tất cả anh chị em của cây với phần tử gốc. Sau đó, bạn chỉ phải sử dụng truy vấn này hai lần và kết nối nó qua phần tử gốc để nhận được tất cả các phần tử được kết nối qua quan hệ cha-con.

Nếu bạn muốn giảm tập kết quả, bạn có thể sử dụng SYS_CONNECT_BY_PATH để làm như vậy:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
                  , SYS_CONNECT_BY_PATH(item.id, '/') path
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
     , childItem.path 
  FROM rek startItem
  JOIN rek childItem
    ON startItem.root_id = childItem.root_id
    AND (startItem.path LIKE childItem.path||'/%'
      OR childItem.path LIKE startItem.path||'/%'
      OR childItem.id = startItem.id)

Ví dụ, điều này sẽ chỉ cung cấp cho bạn điểm xuất phát của trẻ em và cha mẹ của bạn và không có mục nhập từ các lá khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất của Oracle DBMS_LOB.INSTR và CONTAINS

  2. Chạy Tổng số theo Nhóm SQL (Oracle)

  3. php:loading trình điều khiển oracle báo lỗi Không thể tải thư viện động - Không thể tìm thấy quy trình đã chỉ định.

  4. Lọc theo ngày trong tuần

  5. Tìm nạp trước Oracle JDBC:cách tránh hết RAM / cách làm cho oracle có độ trễ cao nhanh hơn