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

Oracle CONNECT BY рекурсивна заявка за дете към родител, включва краен родител, който се самопрепраща

Получих този резултат, като използвах WITH клауза.

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;

И изглежда, че работи и по този начин.

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

Надявам се да помогне.




  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?

  2. EF и TransactionScope както за SQL Server, така и за Oracle без ескалиране/обхват до DTC?

  3. В SQL*Plus, как да променя подканата, за да показва свързания потребител и база данни?

  4. Как да премахнете скритите двойни кавички в стойностите на колоните на SQL Developer

  5. Динамична заявка за PIVOT In Clause