Oracle
 sql >> Datenbank >  >> RDS >> Oracle

CONNECT BY oder hierarchische Abfragen in anderen RDBMS als Oracle

SQL Server verwendet allgemeine Tabellenausdrücke (WITH-Anweisung), um dasselbe zu erreichen (siehe Rekursive Abfragen mit allgemeinen Tabellenausdrücken).

Diese Art von Abfrage kann auch in Oracle verwendet werden (beginnend mit 11g, wenn ich mich nicht irre).

Die resultierende Abfrage ist komplexer:

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;