我必须在提供子级的层次结构中找到顶级父级。当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属于不同的层次结构
非常感谢您的帮助谢谢
如果我理解正确,那应该起作用
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
=?