我正在尝试重现本教程中的第一个简单示例。
但是,我不明白为什么我会返回这么多行。我希望 1 仅在 1 级而不是 2 级向 2 报告。
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.
你得到很多行,因为没有
START WITH
它输出所有可能的层次结构。您会在级别 1 (1->2) 上看到 1 个报告 2,在级别 2 (1->2->NULL) 上看到另一个报告。添加SYS_CONNECT_BY_PATH(reports_to, '/') "Path"
到 select 将有助于可视化。让我们只连接 2 行以进行说明:
将输出:
如果我们取消注释 "start with" ,结果将是