sql >> Database >  >> RDS >> Oracle

Oracle SQL volledige hiërarchie gegeven elk knooppunt als invoer

Als u het als weergave wilt gebruiken, kunt u het volgende doen:

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

De subquery rek verbindt alle broers en zussen van de boom met het wortelelement. Dan hoef je deze query maar twee keer te gebruiken en via het root-element te verbinden om alle elementen te krijgen die via parent-child-relatie zijn verbonden.

Als u de resultatenset wilt verkleinen, kunt u de SYS_CONNECT_BY_PATH gebruiken om dit te doen:

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)

Dit geeft je bijvoorbeeld alleen de kinderen en ouders van je startpunt en geen invoer van andere bladeren.



  1. Postgresql - Hoe extraheer ik het eerste voorkomen van een subtekenreeks in een tekenreeks met behulp van een patroon voor reguliere expressies?

  2. Hoe waarden in anoniem blok door te geven met plsql-tabelparameter

  3. JDBC converteert Timestamp naar NULL (probleem met nulDateTimeBehavior)

  4. Hoe een id uit de database te halen bij het klikken op een lijstweergave-item in Android