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

Защо CONNECT BY LEVEL в таблица връща допълнителни редове?

В първата заявка се свързвате само с нивото. Така че, ако ниво <=1, получавате всеки от записите 1 път. Ако ниво <=2, тогава получавате всяко ниво 1 път (за ниво 1) + N пъти (където N е броят на записите в таблицата). Все едно се присъединявате кръстосано, защото просто избирате всички записи от таблицата, докато се достигне нивото, без да имате други условия за ограничаване на резултата. За ниво <=3 това се прави отново за всеки от тези резултати.

Така че за 3 записа:

  • Lvl 1:3 запис (всички имат ниво 1)
  • Lvl 2:3 записа с ниво 1 + 3*3 записа с ниво 2 =12
  • Lvl 3:3 + 3*3 + 3*3*3 =39 (всъщност, по 13 записа).
  • Lvl 4:започвате да виждате шаблон? :)

Това всъщност не е кръстосано съединение. Кръстосаното свързване ще върне само онези записи, които имат ниво 2 в този резултат от заявката, докато с това свързване чрез, получавате записите с ниво 1, както и записите с ниво 2, което води до 3 + 3*3 вместо просто 3*3 запис.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Клауза BETWEEN срещу <=И>=

  2. ORA-06508:PL/SQL:не можа да намери извикан програмен модул

  3. Икони за разработчици на SQL

  4. Как да премахнете множество интервални дялове въз основа на дата?

  5. 11gR2 Compression Advisor =Evil