sql >> Base de Datos >  >> RDS >> Oracle

Consulta SQL para resolver dependencias transitivas en la base de datos.

Como está ejecutando Oracle 11g (y si es la versión 2), como uno de los métodos, puede usar la expresión de tabla común recursiva (también conocida como factorización de subconsulta recursiva) para obtener el resultado deseado .

SQL> with rcte(r1, r2, lv, root) as(
  2    select r1
  3         , r2
  4         , 0 lv
  5         , r1
  6     from rd
  7    where r1 = 1
  8  
  9    union all
 10  
 11    select t.r1
 12         , t.r2
 13         , lv + 1
 14         , q.root
 15      from rd   t
 16      join rcte q
 17        on (t.r1 = q.r2)
 18  )
 19  search depth first by r1 set s
 20  cycle r1 set is_cycle to 'y' default 'n'
 21  
 22  select root
 23       , r2
 24    from rcte
 25  where is_cycle = 'n'
 26    and r2 <> root
 27  ;

      ROOT         R2
---------- ----------
         1          2
         1          3
         1          4
         1          5