sql >> Databáze >  >> RDS >> Oracle

Najděte všechny uzly v modelu seznamu sousedství pomocí oracle connect by

Nakonec jsem přišel s podobným řešením:

  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
   );

Funguje se všemi uzly pro uvedený příklad. Pokud má ale jeden z listů druhého rodiče a počáteční bod je nad tímto uzlem nebo v jiné větvi, nefunguje to.

Ale pro mě je to dost dobré.

Řešením pro získání všech uzlů v grafu by mohlo být:implementujte opak výše uvedeného dotazu (shora dolů) a poté je spusťte (zdola nahoru, shora dolů) naopak, dokud nenajdete žádné další nové uzly. PL/SQL a o výkonu také nevím.



  1. Jak zpětně vytvořit databázi v MySQL Workbench

  2. Scala &Play! &Automatické zvýšení Slick &PostgreSQL

  3. Použití SQL k určení statistiky počtu slov v textovém poli

  4. Snadný způsob, jak nasadit MySQL Galera Cluster na AWS