ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 从itpub上看到的关于connect by的一个帖子

从itpub上看到的关于connect by的一个帖子

原创 Linux操作系统 作者:abstractcyj 时间:2013-10-11 10:42:15 0 删除 编辑
原帖地址:
http://www.itpub.net/thread-1821229-1-1.html

题目要求:求出表scott.emp中手下有被管理员工的被管理员工数目.

看到关于connect_by_root的一个比较巧妙的用法


从结果来看,connect_by_root(ename)就是求出上级根节点的ename的值。
最终SQL:

SELECT MAX(connect_by_root(ename)), COUNT(*) - 1
  FROM emp
CONNECT BY PRIOR empno = mgr
 GROUP BY connect_by_root(ename)
HAVING COUNT(*) > 1
不过奇怪的是一定要增加一个MAX才能正常执行,应当是Oracle的一个bug。

另:
SELECT ename, manage_emp_cnt
  FROM (SELECT ename,
               (SELECT COUNT(b.empno) - 1
                  FROM scott.emp b
                 START WITH b.empno = a.empno
                CONNECT BY PRIOR b.empno = b.mgr) manage_emp_cnt
          FROM scott.emp a)
 WHERE manage_emp_cnt > 0

QQ20131011104752.jpg

QQ20131011105624.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-774133/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Redo Log的冗余
请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    559
  • 访问量
    854636