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

¿Por qué CONNECT BY LEVEL en una tabla devuelve filas adicionales?

En la primera consulta, se conecta solo por el nivel. Entonces, si el nivel <=1, obtiene cada uno de los registros 1 vez. Si el nivel <=2, obtiene cada nivel 1 vez (para el nivel 1) + N veces (donde N es el número de registros en la tabla). Es como si estuviera realizando una unión cruzada, porque solo está seleccionando todos los registros de la tabla hasta alcanzar el nivel, sin tener otras condiciones que limiten el resultado. Para el nivel <=3, esto se vuelve a hacer para cada uno de esos resultados.

Así que para 3 registros:

  • Nivel 1:3 registros (todos con nivel 1)
  • Nivel 2:3 registros con nivel 1 + 3*3 registros con nivel 2 =12
  • Nvl 3:3 + 3*3 + 3*3*3 =39 (de hecho, 13 registros cada uno).
  • Nivel 4:¿empiezas a ver un patrón? :)

No es realmente una unión cruzada. Una combinación cruzada solo devolvería los registros que tienen el nivel 2 en el resultado de esta consulta, mientras que con esta conexión, obtiene los registros que tienen el nivel 1 y los registros que tienen el nivel 2, lo que da como resultado 3 + 3 * 3 en lugar de solo registro 3*3.