• Oracle Connect by与递归with


    层次查询

    select * from emp;

    select empno,

    ename,

    job,

    mgr,

    sal,

    deptno,level lv,

    sys_connect_by_path(ename, '->') tree_path,

    connect_by_root(ename) tree_root,

    connect_by_isleaf isleaf,

    decode(connect_by_isleaf,1,ename,null) tree_leaf

    from emp

    start with empno = 7369

    connect by prior mgr = empno

    order by level,empno;

    with t(empno,

    ename,

    job,

    mgr,

    sal,

    deptno,

    lv,

    tree_path,

    tree_root,

    isleaf,tree_leaf) as

    (select empno,

    ename,

    job,

    mgr,

    sal,

    deptno,

    1 lv,

    '->'||ename,

    ename,

    (select decode(count(1), 0, 1) from emp where a.mgr = empno) isleaf,

    (select decode(count(1), 0, a.ename) from emp where a.mgr = empno) leafname

    from emp a

    where empno = '7369'

    union all

    select a.empno,

    a.ename,

    a.job,

    a.mgr,

    a.sal,

    a.deptno,

    b.lv + 1,

    b.tree_path || '->' || a.ename,

    b.tree_root,

    (select decode(count(1), 0, 1) from emp where a.mgr = empno) isleaf,

    (select decode(count(1), 0,a.ename) from emp where a.mgr = empno) leafname

    from emp a, t b

    where a.empno = b.mgr)

    select * from t order by lv,empno;

  • 相关阅读:
    167. 两数之和 II
    14. 最长公共前缀
    28. 实现strStr()
    118. 杨辉三角
    54. 螺旋矩阵
    498. 对角线遍历
    66. 加一
    747. 至少是其他数字两倍的最大数
    34. 在排序数组中查找元素的第一个和最后一个位置
    164. 寻找峰值
  • 原文地址:https://www.cnblogs.com/mellowsmile/p/4669519.html
Copyright © 2020-2023  润新知