加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (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 select sys_connect_by_path (title,‘/‘)from tb_menustart with id = 50connect by prior parent = id;

在这里我又不得不放个怨言了。oracle只提供了一个sys_connect_by_path函数,却忘了字符串的毗连的次序。在上面的例子中,第一个sql是从根节点开始遍历,而第二个sql是直接找到当前节点,从服从上来说已经是千差万别,更要害的是第一个sql只能选择一个节点,而第二个sql却是遍历出了一颗树来。再次ps一下。

sys_connect_by_path函数就是从start with开始的处所开始遍历,并记下其遍历到的节点,start with开始的处所被视为根节点,将遍历到的路径按照函数中的脱离符,构成一个新的字符串,这个成果照旧很强盛的。

11)、列出当前节点的根节点。
在前面说过,根节点就是start with开始的处所。

1 2 3 4 select connect_by_root title,tb_menu.*from tb_menustart with id = 50connect by prior parent = id;

connect_by_root函数用来列的前面,记录的是当前节点的根节点的内容。

12)、列出当前节点是否为叶子。
这个较量常见,尤其在动态目次中,在查出的内容是否尚有下级节点时,这个函数是很合用的。

1 2 3 4 select connect_by_isleaf,tb_menu.*from tb_menustart with parent is nullconnect by parent = prior id;

connect_by_isleaf函数用来判定当前节点是否包括下级节点,假如包括的话,声名不是叶子节点,这里返回0;反之,假如不包括下级节点,这里返回1。

至此,oracle树型查询根基上讲完了,以上的例子中的数据是行使到做过的项目中的数据,由于内里的内容也许欠好领略,以是就所有效一些新的例子来举办叙述。以上全部sql都在本机上测试通过,也都能实现响应的成果,可是并不能担保是办理这类题目的最优方案(如第8条明明写成存储进程会更好).

(编辑:湖南网)

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

从当前节点开始:

热点阅读