oracle中进行递归查询

在相关业务查询中,我们常常遇到相关的上下级关系情况,如组织层级等,这个时候可以使用oracle提供的start with 关键字进行递归查询。

语法如下:

SELECT ... FROM + 表名
START WITH + 条件1
CONNECT BY PRIOR + 条件2
WHERE + 条件3

条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列名外,还允许使用列表达式。

START WITH 子句为可选项,用来标识哪个节点作为查找树形结构的根节点。若该子句省略,则表示所有满足查询条件的行作为根节点。

条件2:是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR a_pid = a_id,意思就是上一条记录的a_pid是本条记录的a_id,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。

PRIOR运算符必须放置在连接关系的2列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构的顺序是自顶向下,还是自底向上。

条件3:是过滤条件,用于对返回的记录进行过滤。

SQL示例如下:

-- 递归查询 上一条记录的orgno是本条记录的parentorgno,即本记录的父亲是上一条记录。
SELECT * FROM sys_org t1 START WITH t1.orgno = '100999' CONNECT BY PRIOR t1.orgno = t1.parentorgno ;

参考博文:
(1)https://www.cnblogs.com/widget90/p/9385791.html (oracle sql实现递归查询,生成树)

posted @ 2021-06-30 15:23  jason小蜗牛  阅读(2274)  评论(0编辑  收藏  举报