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

Oracle SQLで親行のすべての再帰的な子を取得するにはどうすればよいですか?

    あなたは近くにいます:

    select connect_by_root parent_id base, parent_id, child_id, qty
    from md_boms
    connect by prior child_id = parent_id
    order by base, parent_id, child_id;
    
              BASE  PARENT_ID   CHILD_ID        QTY
        ---------- ---------- ---------- ----------
                25         25         26          1 
                25         25         27          2 
                25         26         28          1 
                25         26         29          1 
                25         26         30          2 
                25         27         31          1 
                25         27         32          1 
                25         27         33          2 
                26         26         28          1 
                26         26         29          1 
                26         26         30          2 
                27         27         31          1 
                27         27         32          1 
                27         27         33          2 
    
         14 rows selected 
    

    connect_by_root オペレーター ベースのparent_idを提供します 。

    SQLフィドル

    qtyをどのように計算しているかわかりません 。子へのパスの合計が必要だと思いますが、それはあなたが示したものと一致しません。出発点として、非常に借ります この回答 から大きく 、次のようなものを試すことができます:

    with hierarchy as (
      select connect_by_root parent_id base, parent_id, child_id, qty,
        sys_connect_by_path(child_id, '/') as path
      from md_boms
      connect by prior child_id = parent_id
    )
    select h.base, h.parent_id, h.child_id, sum(e.qty)
    from hierarchy h
    join hierarchy e on h.path like e.path ||'%'
    group by h.base, h.parent_id, h.child_id
    order by h.base, h.parent_id, h.child_id;
    
         BASE  PARENT_ID   CHILD_ID SUM(E.QTY)
    ---------- ---------- ---------- ----------
            25         25         26          1 
            25         25         27          2 
            25         26         28          2 
            25         26         29          2 
            25         26         30          3 
            25         27         31          3 
            25         27         32          3 
            25         27         33          4 
            26         26         28          1 
            26         26         29          1 
            26         26         30          2 
            27         27         31          1 
            27         27         32          1 
            27         27         33          2 
    
     14 rows selected 
    


    1. SQLはプロジェクトで機能しなかった名前を取得します

    2. グループ関数では参照はサポートされていません

    3. エンティティで主キーのないビューを使用する

    4. ci_sessionsテーブルのCodeIgniterで1064エラー