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

再帰CTEは、任意のポイントからの親とフィールドを連結します

    トップダウン メソッド最初のクエリはルート(親のないアイテム)のみを選択する必要があるため、クエリは各行を1回だけ返します。

    with recursive top_down as (
        select id, parent, text
        from test
        where parent is null
    union all
        select t.id, t.parent, concat_ws('/', r.text, t.text)
        from test t
        join top_down r on t.parent = r.id
    )
    select id, text
    from top_down
    where id = 4    -- input
    

    特定のアイテムを見つけることが目標の場合は、ボトムアップ アプローチはより効率的です:

    with recursive bottom_up as (
        select id, parent, text
        from test
        where id = 4    -- input
    union all
        select r.id, t.parent, concat_ws('/', t.text, r.text)
        from test t
        join bottom_up r on r.parent = t.id
    )
    select id, text
    from bottom_up
    where parent is null
    

    両方のクエリのfinalwhere条件を削除して、違いを確認してください。

    レキスターでテストしてください。




    1. ORA-01097

    2. 16進数をvarchar(datetime)にキャストする方法は?

    3. アンドロイドルームデータベースとの1対多の関係でフィルタリングする方法

    4. Linux-PHP 7.0およびMSSQL(Microsoft SQL)