Oracle 甲骨文-得到孩子和祖父母
我需要获取给定节点的子节点,以及属于其最高祖先的字段。我知道如何将两者单独地结合起来,我以后可能会想出如何通过编程将两者结合起来;但我更愿意在一个查询中完成所有操作 假设我的表包含字段id、item_id、code和name,并且item_id为0是根节点,并且我的树如下所示:Oracle 甲骨文-得到孩子和祖父母,oracle,hierarchical-data,Oracle,Hierarchical Data,我需要获取给定节点的子节点,以及属于其最高祖先的字段。我知道如何将两者单独地结合起来,我以后可能会想出如何通过编程将两者结合起来;但我更愿意在一个查询中完成所有操作 假设我的表包含字段id、item_id、code和name,并且item_id为0是根节点,并且我的树如下所示: id item_id code name level ------------------------------------ 1 0 Root 1 2
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
id item_id code name level
-------------------------------------
1 0 Root 1
我还想从这些节点的最高祖先处获取name字段。我可以使用以下方法获取这些节点:
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
-------------------------------------
2 1 my_value Child1 2
3 2 Child2 3
id item_id code name level
-------------------------------------
1 0 Root 1
我想添加从上述查询返回的name字段,作为添加到从第一个查询返回的两个节点的附加字段,即
id item_id code name root_name level
------------------------------------------------
2 1 my_value Child1 Root 2
3 2 Child2 Root 3
我希望这是清楚的。有什么建议吗?可能从根目录开始,然后过滤,以限制从“我的值”这样的代码开始
SQL> select id, item_id, code, name, lvl, root_name
2 from (select id, item_id, code, name, level lvl, sys_connect_by_path(code, '|') c,
3 connect_by_root name as root_name
4 from my_table
5 start with item_id = 0
6 connect by prior id = item_id)
7 where c like '%my_value%';
ID ITEM_ID CODE NAME LVL ROOT_NAME
---------- ---------- -------------------- ---------- ---------- ----------
2 1 my_value Child1 2 Root
3 2 Child2 3 Root
太完美了,谢谢你!是时候阅读sys_connect_by_path和connect_by_root了!