sql >> Base de Datos >  >> RDS >> Oracle

CONNECT BY o consultas jerárquicas en RDBMS que no sean Oracle

SQL Server usa expresiones de tabla comunes (Con sentencia) para lograr lo mismo (ver Consultas recursivas usando expresiones de tabla comunes).

Este tipo de consulta también se puede usar en Oracle (comenzando con 11g si no me equivoco).

La consulta resultante es más compleja:

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;