Oracle
 sql >> база данни >  >> RDS >> Oracle

Намерете всички възли в модел на списък на съседство с Oracle Connect by

Най-накрая измислих решение, подобно на това:

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

Работи с всички възли за предоставения пример. Но ако един от листата има втори родител и началната точка е над този възел или в различен клон, това не работи.

Но за мен е достатъчно добро.

Решение за получаване на всички възли в графиката може да бъде:внедрите обратното на заявката по-горе (отгоре надолу) и след това ги изпълнете (отдолу нагоре, отгоре надолу) обратно, докато не намерите повече нови възли. Това ще трябва PL/SQL и аз също не знам за производителността.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преместване на данни от oracle към HDFS, обработка и преместване към Teradata от HDFS

  2. Инсталиране на Oracle Warehouse Builder 11g R2 Client

  3. Как да намерите грешката, причиняваща ora-06575?

  4. Зареждането на XML данни получава грешка, че моят контролен файл препраща към несъществуващо поле

  5. Стартиране на PHP:Не може да се зареди динамична библиотека 'C:\xampp\php\ext\php_oci8_12c.dll' - Посочената процедура не може да бъде намерена