Я уже написал запрос, чтобы найти старшего менеджера данного сотрудника, использующего connect by before, но мне нужно избегать Connect by Prior
Исходная таблица:
Employee_Id Manager Id
1 10
10 20
20 Null
2 5
5 7
7 null
3 6
6 Null
Таблица OutPut
Input Output
Employee_id Employee_ID
1 20
2 7
3 6
5 7
Мой подход:
select * from (
SELECT *
FROM EMPLOYEEs
START WITH EMPLOYEE_ID = 103
CONNECT BY EMPLOYEE_ID = PRIOR MANAGER_ID
) where manager_id is null
Альтернативный подход:
with cte (EMPLOYEE_ID,MANAGER_ID,lev) as (
select EMPLOYEE_ID, MANAGER_ID, 0 as lev
from employees
union all
select cte.EMPLOYEE_ID, employees.MANAGER_ID, lev + 1
from cte join
employees
on cte.MANAGER_ID = employees.EMPLOYEE_ID
)
select * from cte where employee_id=103 and MANAGER_ID is null;
, но неполучение ожидаемого результата с альтернативным подходом.