sql >> Database >  >> RDS >> Oracle

Vind alle knooppunten in een aangrenzend lijstmodel met oracle connect by

Uiteindelijk kwam ik met een soortgelijke oplossing als deze:

  SELECT child FROM child_parent START WITH parent =
   (
    SELECT DISTINCT parent FROM   
     (
      SELECT parent
      FROM child_parent
      WHERE CONNECT_BY_ISLEAF = 1
        START WITH child = 5
        CONNECT BY PRIOR parent = child
      UNION
      SELECT parent
      FROM child_parent
      WHERE parent = 5
     ) 
   )
   CONNECT BY NOCYCLE PRIOR child = parent
   UNION
   SELECT DISTINCT parent FROM   
   (
    SELECT parent
    FROM child_parent
    WHERE CONNECT_BY_ISLEAF = 1
      START WITH child = 5
      CONNECT BY PRIOR parent = child
    UNION
    SELECT parent
    FROM child_parent
    WHERE parent = 5
   );

Het werkt met alle knooppunten voor het gegeven voorbeeld. Maar als een van de bladen een tweede ouder heeft en het startpunt bevindt zich boven dit knooppunt of in een andere vertakking, dan werkt het niet.

Maar voor mij is het goed genoeg.

Een oplossing om alle knooppunten in de grafiek te krijgen, zou kunnen zijn:implementeer het tegenovergestelde van de bovenstaande query (van boven naar beneden) en voer ze vervolgens uit (van onder naar boven, van boven naar beneden) totdat u geen nieuwe knooppunten meer vindt. PL/SQL en ik weet ook niets van de prestaties.



  1. Hoe u kunt profiteren van de nieuwe partitioneringsfuncties in PostgreSQL 11

  2. Postgresql, selecteer lege velden

  3. Snapshot-replicatie maken

  4. Slaapstand maakt geen tabel in de database