最上位の祖先に属するフィールドとともに、特定のノードの子を取得する必要があります。私は両方を個別に取得する方法を知っています。おそらく、後で2つをプログラムで組み合わせる方法を理解できるでしょう。しかし、私はそれをすべて1つのクエリで行うことを好みます。
テーブルにフィールド id、item_id、code、および name が含まれており、item_id が 0 の場合はルート ノードであり、ツリーが次のようになっていると仮定します。
id item_id code name level
------------------------------------
1 0 Root 1
2 1 my_value Child1 2
3 2 Child2 3
以下を使用して、必要なノードを取得できます。
select id, item_id, code, name, level from my_table
start with code like '%my_value%'
connect by prior id = item_id
戻り値:
id item_id code name level
-------------------------------------
2 1 my_value Child1 2
3 2 Child2 3
これらのノードの最上位の祖先から名前フィールドも取得したいと思います。以下を使用してこれらのノードを取得できます。
select id, item_id, code, name, level from my_table
where level = (
select max(level) as max_level from my_table
start with code like '%my_value%'
connect by prior item_id = id
)
start with code like '%my_value%'
connect by prior item_id = id
戻り値:
id item_id code name level
-------------------------------------
1 0 Root 1
上記のクエリから返された名前フィールドを、最初のクエリから返された 2 つのノードに追加される追加フィールドとして追加したいと思います。
id item_id code name root_name level
------------------------------------------------
2 1 my_value Child1 Root 2
3 2 Child2 Root 3
それが明確であることを願っています。助言がありますか?