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

Oracleで親(任意のレベル)の最も子のノードを検索します

    「ほとんどの子ノード」とは、ツリーのリーフノードを意味すると思います。 CONNECT_BY_ISLEAFを使用してリーフノードを判別できます。 階層の疑似列(CONNECT BY )クエリ。

    テーブル内のサンプルデータを指定すると、次のクエリで目的の結果が得られます。

    select connect_by_root id id
         , parent_did
      from table1
     where connect_by_isleaf = 1
    connect by id = prior parent_did
      start with id in ('a','b','c');
    
    | ID | PARENT_DID |
    |----|------------|
    |  a |          f |
    |  a |          g |
    |  a |          h |
    |  b |          f |
    |  b |          g |
    |  b |          h |
    |  c |          f |
    

    SQLフィドル

    2番目のテーブルが開始条件としてa、b、およびcを保持しているという事実を含め、更新されたデータと要件を考慮に入れます。

    select connect_by_root parent_id parent_id
         , id
      from table1
     where connect_by_isleaf = 1
    connect by prior id = parent_id
      start with parent_id in (select id from table2)
    
    | PARENT_ID | ID |
    |-----------|----|
    |         a |  f |
    |         a |  g |
    |         a |  h |
    |         b |  f |
    |         b |  g |
    |         b |  h |
    |         c |  f |
    

    SQLフィドル 階層クエリの詳細については、ドキュメント をご覧ください。 。



    1. 現在のビューのAPPL_TOPスナップショットとは

    2. SelectクエリのOFFSET-FETCHオプションによるフィルタリング-SQLServer/TSQLチュートリアルパート118

    3. 降順で現在の日付を上に、その他のレコードを表示するMySQLクエリ

    4. #1136-列数が行1の値数と一致しません