Estou tentando reproduzir o primeiro exemplo simples deste tutorial .
No entanto, não entendo por que recebo tantas linhas de volta. Eu esperaria que 1 reportasse a 2 apenas no nível 1 e não no nível 2 também.
SQL> select employee_id, reports_to from employees;
EMPLOYEE_ID REPORTS_TO
----------- ----------
1 2
2
3 2
4 2
5 2
6 5
7 5
8 2
9 5
9 rows selected.
SQL> select employee_id, reports_to, LEVEL from employees connect by prior employee_id = reports_to;
EMPLOYEE_ID REPORTS_TO LEVEL
----------- ---------- ----------
1 2 1
8 2 1
5 2 1
6 5 2
9 5 2
7 5 2
4 2 1
3 2 1
6 5 1
9 5 1
7 5 1
EMPLOYEE_ID REPORTS_TO LEVEL
----------- ---------- ----------
2 1
1 2 2
8 2 2
5 2 2
6 5 3
9 5 3
7 5 3
4 2 2
3 2 2
20 rows selected.
Você está obtendo muitas linhas porque sem
START WITH
ele gera todas as hierarquias possíveis. Você vê 1 relatório 2 no nível 1 (1->2) e outro no nível 2 (1->2->NULL). AdicionarSYS_CONNECT_BY_PATH(reports_to, '/') "Path"
à seleção ajudará a visualizar isso.Vamos conectar apenas 2 linhas para ilustração:
emitirá:
Se descomentarmos "começar com" , o resultado será