Oracle
 sql >> Database >  >> RDS >> Oracle

CONNECT BY o query gerarchiche in RDBMS diversi da Oracle

SQL Server utilizza espressioni di tabella comuni (istruzione WITH) per ottenere lo stesso risultato (vedi Query ricorsive che utilizzano espressioni di tabelle comuni).

Questo tipo di query può essere utilizzato anche in Oracle (a partire da 11g se non sbaglio).

La query risultante è più complessa:

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;