Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

CONNECT BY ou consultas hierárquicas em RDBMS que não sejam Oracle


SQL Server usa expressões de tabela comuns (COM instrução) para obter o mesmo (consulte Consultas recursivas usando expressões de tabela comuns).

Esse tipo de consulta também pode ser usado no Oracle (começando com 11g se não me engano).

A consulta resultante é mais complexa:
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;