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

Oracleでの再帰

    WITH    Ancestor(arg1, arg2) AS
            (
            SELECT  p.arg1, p.arg2
            FROM    parent p
            WHERE   arg2 NOT IN
            (
                SELECT  arg1
                FROM    parent
            )
    
            UNION ALL
    
            SELECT  p.arg1, a.arg2
            FROM    Ancestor a 
            JOIN    parent p
            ON      p.arg2 = a.arg1
            )
    SELECT  *
    FROM    Ancestor
    

    Oracle 再帰的なCTEのみをサポートします 11g以降 リリース2。

    以前のバージョンでは、CONNECT BYを使用します 条項:

    SELECT  arg1, CONNECT_BY_ROOT arg2
    FROM    parent
    START WITH
            arg2 NOT IN
            (
            SELECT  arg1
            FROM    parent
            )
    CONNECT BY
            arg2 = PRIOR arg1
    


    1. MySQLで2つの列を比較する方法

    2. 'dateAdded'のデフォルト値が無効です

    3. SQLiteコマンド

    4. SQLiteクエリ結果をINSERTステートメントとして出力する