在 Oracle 中获取 parent 具有最深 children 路径(意味着更宏大 children)的记录
Get parent records which has deepest children path (means more grand children) in Oracle
我有按层次顺序存储的数据,我想按顺序查找所有 parents,其中最深的 children 在它下面(有 parent -> children -> grand children -> grand grand children...等),目前我使用 connect by 子句来获取所有 children(立即和扩展 children ..),但我需要获取所有 parent 具有最深 children 路径的 ID。
以下查询为我提供了 1501605 类别下的所有 children
select category_id, parent_id
from CATEGORY
start with CATEGORY_ID = 1501605
connect by PARENT_ID = PRIOR CATEGORY_ID
分层查询中的深度称为level
。如果您在级别上执行 rank
(降序),您将获得树中与最深级别相关的所有节点。
select category_id, parent_id
from (
select category_id, parent_id, level, rank() over (order by level desc) as deepest
from CATEGORY
start with CATEGORY_ID = 1501605
connect by PARENT_ID = PRIOR CATEGORY_ID
) where deepest = 1
;
我有按层次顺序存储的数据,我想按顺序查找所有 parents,其中最深的 children 在它下面(有 parent -> children -> grand children -> grand grand children...等),目前我使用 connect by 子句来获取所有 children(立即和扩展 children ..),但我需要获取所有 parent 具有最深 children 路径的 ID。
以下查询为我提供了 1501605 类别下的所有 children
select category_id, parent_id
from CATEGORY
start with CATEGORY_ID = 1501605
connect by PARENT_ID = PRIOR CATEGORY_ID
分层查询中的深度称为level
。如果您在级别上执行 rank
(降序),您将获得树中与最深级别相关的所有节点。
select category_id, parent_id
from (
select category_id, parent_id, level, rank() over (order by level desc) as deepest
from CATEGORY
start with CATEGORY_ID = 1501605
connect by PARENT_ID = PRIOR CATEGORY_ID
) where deepest = 1
;