Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Znajdź wszystkie węzły w modelu listy sąsiedztwa z Oracle connect by

W końcu wymyśliłem rozwiązanie podobne do tego:

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

Działa ze wszystkimi węzłami w podanym przykładzie. Ale jeśli jeden z liści ma drugiego rodzica, a punkt początkowy znajduje się nad tym węzłem lub w innej gałęzi, nie działa.

Ale dla mnie to wystarczy.

Rozwiązaniem pozwalającym uzyskać wszystkie węzły na wykresie może być:zaimplementuj przeciwieństwo powyższego zapytania (od góry do dołu), a następnie wykonaj je (z dołu do góry, z góry na dół) na odwrót, dopóki nie znajdziesz więcej nowych węzłów. PL/SQL i ja też nie wiem o wydajności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać tylko 1 wiersz z Oracle sql?

  2. upuść przestrzeń tabel, jeśli nie istnieje

  3. Warunkowa klauzula WHERE z instrukcją CASE w Oracle

  4. java.sql.SQLException:nieprawidłowy indeks kolumny w wildfly

  5. PHP i Oracle - oci_connect() ORA-12705:Nie można uzyskać dostępu do plików danych NLS