Pourquoi se CONNECTER PAR NIVEAU sur une table retour lignes supplémentaires?

À l'aide de CONNECTER PAR NIVEAU semble renvoyer trop de lignes lorsqu'il est effectué sur une table. Quelle est la logique derrière ce qui se passe?

En supposant que le tableau suivant:

create table a ( id number );

insert into a values (1);
insert into a values (2);
insert into a values (3);

Cette requête renvoie les 12 lignes (SQL Violon).

 select id, level as lvl
   from a
connect by level <= 2
  order by id, level

Une ligne pour chaque tableau avec la valeur de la colonne LVL 1 et trois pour chaque table où la colonne est LVL 2, c'est à dire:

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 

C'est équivalent à cette requête, qui renvoie les mêmes résultats.

 select id, level as lvl
   from dual
  cross join a
connect by level <= 2
  order by id, level

Je ne comprends pas pourquoi ces requêtes de 12 lignes ou pourquoi il ya trois rangées où LVL 2 et un seul où LVL est de 1 pour chaque valeur de la colonne ID.

En augmentant le nombre de niveaux qui sont "connectés" à 3 retourne 13 lignes pour chaque valeur de l'ID. 1 où est LVL 1, 3, où le LVL 2 et 9 où est LVL 3. Cela semble suggérer que le nombre de lignes retournées sont le nombre de lignes dans Un tableau à la puissance de la valeur de LVL de moins 1.

J'aurais cependant que ces requêtes sera la même que la suivante, ce qui renvoie
6 lignes

select id, lvl
  from ( select level  as lvl
           from dual
        connect by level  <= 2
                )
 cross join a
 order by id, lvl

La la documentation n'est pas particulièrement clair, pour moi, dans l'explication de ce qui devrait se produire. Ce qui se passe avec ces pouvoirs, et pourquoi ne sont pas les deux premières requêtes le même que le troisième?

- Nous avons quelque chose en MySQL 5, équivalent à cela ?

OriginalL'auteur Ben | 2012-11-24