Oracle
 sql >> Base de données >  >> RDS >> Oracle

CONNECT BY ou requêtes hiérarchiques dans RDBMS autre qu'Oracle

SQL Server utilise des expressions de table communes (instruction WITH) pour obtenir la même chose (voir Requêtes récursives utilisant des expressions de table communes).

Ce type de requête peut également être utilisé dans Oracle (en commençant par 11g si je ne me trompe pas).

La requête résultante est plus complexe :

WITH emp(employee_id, manager_id, job_id, last_name, lvl)
AS (
    SELECT e.employee_id, e.manager_id, e.job_id, e.last_name, 1 lvl
    FROM employees e
    WHERE job_id = 'AD_VP'
    UNION ALL
    SELECT e.employee_id, e.manager_id, e.job_id, e.last_name, r.lvl + 1 lvl
    FROM employees e
    JOIN emp r ON r.employee_id = e.manager_id
)
SELECT LPAD(' ', 2 * (lvl-1)) || last_name org_chart,
    employee_id, manager_id, job_id
FROM emp;