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

SQL заявка за разрешаване на транзитивни зависимости в базата данни

Тъй като използвате Oracle 11g (и ако се случи да е Release 2), като един от методите можете да използвате рекурсивен израз на обща таблица (известен също като рекурсивен факторинг на подзаявка) за да получите желания резултат .

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инструментариум:Прехвърляне на org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper към oracle.jdbc.OracleConnection

  2. Как да се свържете с Oracle, като използвате име на услуга вместо SID

  3. Празни условия на Oracle за проверка на условието „ “

  4. Как мога условно да конструирам име на таблица за оператор SQL CREATE TABLE?

  5. Изберете без клауза FROM в Oracle