这里查询分成以下几步。 起首,将第7个一样,将全表都行使姑且表加上级别; 其次,按照级别来判定有几种范例,以上文中举的例子来说,有三种环境: (1)当前节点为顶级节点,即查询出来的lev值为1,那么它没有上级节点,不予思量。 (2)当前节点为2级节点,查询出来的lev值为2,那么就只要担保lev级别为1的就是其上级节点的兄弟节点。 (3)其余环境就是3以及以上级别,那么就要选查询出来其上级的上级节点(祖父),再来判定祖父的下级节点都是属于该节点的上级节点的兄弟节点。 最后,就是行使union将查询出来的功效举办团结起来,形成功效集。
9)、查询一个节点的父节点的同级节点(族叔)。 这个着实跟第7种环境是沟通的。
|
1
2
3
4
5
6
7
8
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)、名称要列着名称所有路径。
这里常见的有两种环境,一种是从顶级列出,直到当前节点的名称(可能其余属性);一种是从当前节点列出,直到顶级节点的名称(或其余属性)。举地点为例:海内的风俗是从省开始、到市、到县、到居委会的,而海外的风俗正好相反(先生说的,还没接过海外的邮件,谁能寄个瞅瞅? )。
从顶部开始:
1
2
3
4
5
select sys_connect_by_path (title,
‘/‘
)
from tb_menu
where id =
50
start with parent is
null
connect by parent = prior id;
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!