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

隣接リストに基づく再帰データの再帰クエリ

    最初のレベルのクエリ(ここではdepth 表と区別するため)は次のようになります:

    select l.name, h.child_id, 1 as depth 
    from level l
    join level_hierarchy h on l.id = h.child_id 
    where h.parent_id is null;
    
       name   | child_id | depth 
    ----------+----------+-------
     Level1_a |        1 |     1
    (1 row)
    

    is nullであることに注意してください (=は使用しないでください nullと比較する 常にnullを与えるので 。

    上記を再帰cteの初期クエリとして使用できます:

    with recursive recursive_query as (
        select l.name, h.child_id, 1 as depth 
        from level l
        join level_hierarchy h on l.id = h.child_id 
        where h.parent_id is null
    union all
        select l.name, h.child_id, depth + 1
        from level l
        join level_hierarchy h on l.id = h.child_id
        join recursive_query r on h.parent_id = r.child_id
    )
    select *
    from recursive_query
    -- where depth = 2
    
       name   | child_id | depth 
    ----------+----------+-------
     Level1_a |        1 |     1
     Level2_b |        3 |     2
     Level2_a |       19 |     2
     Level3_a |        4 |     3
     Level3_b |        5 |     3
     Level4_a |        6 |     4
     Level4_b |        7 |     4
    (7 rows)    
    


    1. 1つのステートメントですべてのビューのすべての特権を付与するにはどうすればよいですか?

    2. SQLServerの論理AND演算子とは-SQLServer/TSQLチュートリアルパート120

    3. ログイン-リモートmysqlデータベースへの認証

    4. Railsはpostgresqlにログインできません-PG::Error-パスワード-正しい情報