你的位置:首页 > 软件开发 > 数据库 > Oracle Connect by与递归with

Oracle Connect by与递归with

发布时间:2015-07-23 10:00:03
层次查询select * from emp; select empno,ename,job,mgr,deptno,level,sys_connect_by_path(ename,/),connect_by_root(ename) ...

层次查询

select * from emp;

Oracle Connect by与递归with

select empno,ename,job,mgr,deptno,level,sys_connect_by_path(ename,'/'),connect_by_root(ename)

from emp

start with mgr is null

connect by prior empno=mgr

order by level,empno;

Oracle Connect by与递归with

WITH T(empno, ename, job, mgr, deptno, the_level, path,top_manager) AS ( ---- 必须把结构写出来

SELECT empno, ename, job, mgr, deptno ---- 先写锚点查询,用START WITH的条件

,1 AS the_level ---- 递归起点,第一层

,'\'||ename ---- 路径的第一截

,ename AS top_manager ---- 原来的CONNECT_BY_ROOT

FROM EMP

WHERE mgr IS NULL ---- 原来的START WITH条件

UNION ALL ---- 下面是递归部分

SELECT e.empno, e.ename, e.job, e.mgr, e.deptno ---- 要加入的新一层数据,来自要遍历的emp表

,1 + t.the_level ---- 递归层次,在原来的基础上加1。这相当于CONNECT BY查询中的LEVEL伪列

,t.path||'\'||e.ename ---- 把新的一截路径拼上去

,t.top_manager ---- 直接继承原来的数据,因为每个路径的根节点只有一个

FROM t, emp e ---- 典型写法,把子查询本身和要遍历的表作一个连接

WHERE t.empno = e.mgr ---- 原来的CONNECT BY条件

) ---- WITH定义结束

SELECT * FROM T

Oracle Connect by与递归with


 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Oracle Connect by与递归with

关键词:oracle

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录