我有分层存储的数据,我想按顺序找到所有父母,其中有最深的孩子(有父母 -> 孩子 ->孙子 ->孙孙......等),目前我使用 connect by 子句来获取所有子项(直接和扩展子项..),但我需要获取具有最深子项路径的所有父 ID。
以下查询为我提供了1501605类别下的所有孩子
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
;