Oracle递归函数:START WITH(树查询)

语法

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

使用

子节点向上找父节点

SELECT ID, PARENT_ID, TEXT
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125140350' -- 开始节点
CONNECT BY PRIOR t.PARENT_ID = t.ID; -- 父节点ID=子节点ID

在这里插入图片描述

父亲节点向下找子节点

SELECT ID, PARENT_ID, TEXT
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125' -- 开始节点
CONNECT BY PRIOR t.ID = t.PARENT_ID; -- 子节点ID=父节点ID

在这里插入图片描述

其他关键字

NOCYCLE

消除数据本身不合理情况导致的循环。如:父ID与子ID相等时将一直循环

SELECT ID, PARENT_ID, TEXT
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125' -- 开始节点
CONNECT BY NOCYCLE PRIOR t.ID = t.PARENT_ID; -- 子节点ID=父节点ID

CONNECT_BY_ISLEAF

当前节点是否是叶子节点
在这里插入图片描述

LEVEL

表示当前节点所处层级, 这里的层级指的是 从 START WITH 查询到的节点开始往下算起, 当前属于第几层级
在这里插入图片描述

SIBLINGS

保护层次

SELECT ID, PARENT_ID, TEXT, CONNECT_BY_ISLEAF AS ISLEAF, LEVEL
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125' -- 开始节点
CONNECT BY PRIOR t.ID = t.PARENT_ID -- 子节点ID=父节点ID
ORDER BY PARENT_ID;

在这里插入图片描述

SELECT ID, PARENT_ID, TEXT, CONNECT_BY_ISLEAF AS ISLEAF, LEVEL
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125' -- 开始节点
CONNECT BY PRIOR t.ID = t.PARENT_ID -- 子节点ID=父节点ID
ORDER SIBLINGS BY PARENT_ID;

在这里插入图片描述

CONNECT_BY_ISCYCLE

是否存在循环,存在返回1,否则返回0,配合 NOCYCLE 关键字一起使用

SELECT ID, PARENT_ID, TEXT, CONNECT_BY_ISLEAF AS ISLEAF, LEVEL, CONNECT_BY_ISCYCLE
FROM TTRD_AUTH_MENU t
START WITH t.ID = '125' -- 开始节点
CONNECT BY NOCYCLE PRIOR t.ID = t.PARENT_ID -- 子节点ID=父节点ID
ORDER SIBLINGS BY TEXT;

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值