加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle 树操纵、递归查询(select…start with…connect by…prio

发布时间:2021-02-24 22:30:21 所属栏目:站长百科 来源:网络整理
导读:一、Oracle中start with…connect by prior子句用法 connect by 是布局化查询顶用到的,其根基语法是: select … from tablename start with 前提1 connect by 前提2 where 前提3; 例: select * from table start with org_id = ‘HBHqfWGWPy’ connect by
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_menuwhere id = 50start with parent is nullconnect by parent = prior id;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

这里查询分成以下几步。
起首,将第7个一样,将全表都行使姑且表加上级别;
其次,按照级别来判定有几种范例,以上文中举的例子来说,有三种环境:
(1)当前节点为顶级节点,即查询出来的lev值为1,那么它没有上级节点,不予思量。
(2)当前节点为2级节点,查询出来的lev值为2,那么就只要担保lev级别为1的就是其上级节点的兄弟节点。
(3)其余环境就是3以及以上级别,那么就要选查询出来其上级的上级节点(祖父),再来判定祖父的下级节点都是属于该节点的上级节点的兄弟节点。
最后,就是行使union将查询出来的功效举办团结起来,形成功效集。

9)、查询一个节点的父节点的同级节点(族叔)。
这个着实跟第7种环境是沟通的。

热点阅读