1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| SQL> WITH employer AS (
SELECT 1 AS emp, 1 AS mgr FROM dual union ALL
SELECT 2 AS emp, 1 AS mgr FROM dual union ALL
SELECT 3 AS emp, 1 AS mgr FROM dual union ALL
SELECT 4 AS emp, 3 AS mgr FROM dual union ALL
SELECT 5 AS emp, 4 AS mgr FROM dual union ALL
SELECT 6 AS emp, 4 AS mgr FROM dual union ALL
SELECT 9 AS emp, 9 AS mgr FROM dual union ALL
SELECT 10 AS emp, 9 AS mgr FROM dual union ALL
SELECT 12 AS emp, 12 AS mgr FROM dual union ALL
SELECT 15 AS emp, 12 AS mgr FROM dual union ALL
SELECT 14 AS emp, 12 AS mgr FROM dual union ALL
SELECT 16 AS emp, 15 AS mgr FROM dual
),
livraison AS (SELECT 1 AS id, 1 AS mgr FROM dual union all
SELECT 2 AS id, 12 AS mgr FROM dual),
emp_liv as (select e.mgr from employer e where exists (select 1 from livraison l where l.mgr=e.mgr))
SELECT emp,mgr
FROM employer
start WITH emp IN (SELECT mgr FROM emp_liv)
connect BY nocycle mgr = prior emp;
EMP MGR
---------- ----------
1 1
2 1
3 1
4 3
5 4
6 4
12 12
15 12
16 15
14 12
10 rows selected. |
Partager