在oracle sql中从子级中找到根父级

问题描述 投票:0回答:1

我必须在提供子级的层次结构中找到顶级父级。当ID = ref

时,最高父级

表格示例:

+ -------------------- +| id parent_id参考|+ -------------------- +| 1 1 1 || 2 1 1 || 3 2 1 || 4 3 1 || 5 4 2 |+ -------------------- +

输入ID 4时,我需要获得最高的父代(ID 1)

我不能简单地从ref = id的表中选择*因为同一张表中可能还有其他层次结构,所以查询必须这样做:

以id开头,例如4如果不相等,请检查id_parent = ref然后使用parent_id作为新ID并检查它是否为id_parent = ref依此类推,直到parent_id = ref

另外,id 5属于不同的层次结构

非常感谢您的帮助谢谢

oracle hierarchy connect-by
1个回答
0
投票

如果我理解正确,那应该起作用

select START_ID ID, PATH, start_ref, ID TOPMOST_ID
from (
         SELECT ID,
                ref,
                case when id = CONNECT_BY_ROOT ref then null else parent_id end parent,
                SYS_CONNECT_BY_PATH(Id, '/')                                    path,
                CONNECT_BY_ROOT ref                                             start_ref,
                CONNECT_BY_ROOT ID                                              start_id
         FROM STACK_TEST
         CONNECT BY  PRIOR parent_id = id
     )
where parent is null

和结果

+--+--------+---------+----------+
|ID|PATH    |START_REF|TOPMOST_ID|
+--+--------+---------+----------+
|1 |/1      |1        |1         |
|2 |/2/1    |1        |1         |
|3 |/3/2/1  |1        |1         |
|4 |/4/3/2/1|1        |1         |
|5 |/5/4/3/2|2        |2         |
+--+--------+---------+----------+

您可以从此ResultSet/View中选择,其中Id =?

© www.soinside.com 2019 - 2024. All rights reserved.