语法
SELECT ...
FROM 【表名】
WHERE 【条件3】
START WITH 【条件1】
CONNECT 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;