Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que CONNECT BY LEVEL em uma tabela retorna linhas extras?


Na primeira consulta, você se conecta apenas pelo nível. Portanto, se o nível <=1, você obtém cada um dos registros 1 vez. Se o nível <=2, você obtém cada nível 1 vez (para o nível 1) + N vezes (onde N é o número de registros na tabela). É como se você estivesse fazendo uma junção cruzada, pois você está apenas pegando todos os registros da tabela até atingir o nível, sem ter outras condições para limitar o resultado. Para o nível <=3, isso é feito novamente para cada um desses resultados.

Então para 3 registros:
  • Registro de nível 1:3 (todos com nível 1)
  • Nível 2:3 registros com nível 1 + 3*3 registros com nível 2 =12
  • Nível 3:3 + 3*3 + 3*3*3 =39 (na verdade, 13 registros cada).
  • Nível 4:começando a ver um padrão? :)

Não é realmente uma junção cruzada. Uma junção cruzada retornaria apenas os registros que possuem nível 2 neste resultado da consulta, enquanto com esta conexão por, você obtém os registros com nível 1, bem como os registros com nível 2, resultando em 3 + 3*3 em vez de apenas 3*3 registro.