Oracle 树操作、递归查询(select…start with…connect by…prio
with tmp as(
??????
select a.*,level leaf???????
??????
from tb_menu a???????????????
??????
start with a.parent is
null
?????
??????
connect by a.parent = prior a.id)
select *??????????????????????????????
from tmp????????????????????????????
where leaf = (select leaf from tmp where id =
6
) -
1
;
基本上,常见的查询在里面了,不常见的也有部分了。其中,查询的内容都是节点的基本信息,都是数据表中的基本字段,但是在树查询中还有些特殊需求,是对查询数据进行了处理的,常见的包括列出树路径等。
补充一个概念,对于数据库来说,根节点并不一定是在数据库中设计的顶级节点,对于数据库来说,根节点就是start with开始的地方。
下面列出的是一些与树相关的特殊需求。
10)、名称要列出名称全部路径。
这里常见的有两种情况,一种是从顶级列出,直到当前节点的名称(或者其它属性);一种是从当前节点列出,直到顶级节点的名称(或其它属性)。举地址为例:国内的习惯是从省开始、到市、到县、到居委会的,而国外的习惯正好相反(老师说的,还没接过国外的邮件,谁能寄个瞅瞅? )。
从顶部开始:
select sys_connect_by_path (title,
‘/‘
)
from tb_menu
where id =
50
start with parent is
null
connect by parent = prior id;
(编辑:52站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
这里查询分成以下几步。 9)、查询一个节点的父节点的同级节点(族叔)。 |