L'utilizzo di CONNECT BY LEVEL sembra restituire troppe righe quando eseguito su un tavolo. Qual è la logica dietro ciò che sta accadendo?Perché CONNECT BY LEVEL su un tavolo restituisce righe aggiuntive?
Assumendo la seguente tabella:
create table a (id number);
insert into a values (1);
insert into a values (2);
insert into a values (3);
questa query restituisce 12 righe (SQL Fiddle).
select id, level as lvl
from a
connect by level <= 2
order by id, level
Una riga per ogni nella tabella A con il valore della colonna LVL essere 1 e tre per ciascuna nella Tabella A dove il LVL colonna è 2, cioè:
ID | LVL ---+----- 1 | 1 1 | 2 1 | 2 1 | 2 2 | 1 2 | 2 2 | 2 2 | 2 3 | 1 3 | 2 3 | 2 3 | 2
È equivalente a questa query, che restituisce gli stessi risultati.
select id, level as lvl
from dual
cross join a
connect by level <= 2
order by id, level
Non capisco perché queste query restituiscono 12 righe o perché ci sono tre righe in cui LVL è 2 e unico dove LVL è di 1 per ogni valore della colonna ID.
Aumentare il numero di livelli "connessi" a 3 returns 13 rows per ciascun valore di ID. 1 dove LVL è 1, 3 dove LVL è 2 e 9 dove LVL è 3. Ciò sembra suggerire che le righe restituite siano il numero di righe nella tabella A alla potenza del valore di LVL meno 1.
I sarebbe hanno però che queste query sarebbe lo stesso come il seguente, che restituisce 6 righe
select id, lvl
from (select level as lvl
from dual
connect by level <= 2
)
cross join a
order by id, lvl
il documentation non è particolarmente chiaro, per me, per spiegare quello che dovrebbe accadere. Cosa sta succedendo con questi poteri e perché le prime due domande non sono le stesse della terza?
Abbiamo qualcosa in MySQL 5, equivalente a questo? – abhijitcaps