sql >> データベース >  >> RDS >> Oracle

CONNECTBYまたはOracle以外のRDBMSの階層クエリ

    SQLServerは一般的なテーブル式を使用します (WITHステートメント)同じことを実現します(一般的なテーブル式を使用した再帰クエリを参照)。

    この種のクエリは、Oracleでも使用できます(間違っていない場合は11gから開始します)。

    結果のクエリはより複雑になります:

    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;
    


    1. リレーショナルデータベースと非リレーショナルデータベース–パート2

    2. SQLで数値列の平均を見つける方法

    3. HibernateはMySQLのONDUPLICATEKEY UPDATE構文で動作しますか?

    4. MySQL-前の行から値を減算し、group by