oracle sql指定节点,关于sql:使用connect_by获取Oracle DB表中树中节点的深度

我有一个看起来像这样的oracle表:

架构:

(数字)node_id

(数字)parent_id

(数字)parent_seq

表中的每个条目代表一个父/子关系。 父母可以是多个孩子的父母,一个孩子可以有多个父母(但是我们可以假设不存在任何循环,因为在提交之前已对其进行了验证)。 如果一个孩子有多个父母,那么表中对应于其node_id的行将多于一行,并且parent_seq将为每个父母递增。

现在,我不需要重建整个树,只需要知道每个节点的深度即可。 DEPTH遵循以下常见定义(树的深度和高度之间有什么区别?)

The depth of a node is the number of edges from the node to the tree's

root node.

有没有一种方法可以使用CONNECT_BY语法在Oracle中正常执行此操作?

SELECT

node_id,

MIN(level) AS best_level,

MIN(sys_connect_by_path(node_id, '/'))

keep (dense_rank FIRST ORDER BY level)

AS best_path

FROM t

START WITH parent_id IS NULL

CONNECT BY prior node_id = parent_id

GROUP BY node_id

ORDER BY 1

小提琴

我相信我在文档中找到了答案。 关键字" LEVEL"是一列,显示执行connect_by语句时的节点级别。 因此,您只需要给定节点的最大级别即可:

select node_id, max(LEVEL) from node_parent_link

CONNECT BY PRIOR node_id = parent_id

group by node_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值