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

Oracle CONNECT BY rekurencyjne zapytanie podrzędne do nadrzędnego, w tym nadrzędny nadrzędny, który odwołuje się do siebie

Otrzymałem ten wynik, używając WITH klauzula.

WITH REC_TABLE ( ID, PARENT_ID)
AS
(
    --Start WITH 
    SELECT ID, PARENT_ID
    FROM table
    WHERE ID='C'

    UNION ALL
    --Recursive Block
    SELECT T.ID, T.PARENT_ID
    FROM table T 
    JOIN REC_TABLE R
    ON R.PARENT_ID=T.ID
    AND R.PARENT_ID!=R.ID   --NoCycle rule
)
SELECT *
FROM REC_TABLE;

I wydaje się, że to też działa w ten sposób.

select id, parent_id
from T
START WITH id = 'C'
CONNECT BY id = PRIOR parent_id and parent_id!= prior id;
--                                  ^^^^^^^^^^^^^^^^^^^^
--                                      break cycles

Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zmień status konta użytkownika Oracle z EXPIRE (GRACE) na OPEN

  2. Gdzie są moje łatki?

  3. Połącz dwie tabele na podstawie czasu

  4. Zapytanie Oracle nie skompiluje się

  5. Czy zadanie może być tworzone dynamicznie wewnątrz wyzwalacza?