zoukankan      html  css  js  c++  java
  • SQL 语句递归查询 With AS 查找所有子节点

     

    create table #EnterPrise
    (
      Department nvarchar(50),--部门名称
      ParentDept nvarchar(50),--上级部门
      DepartManage nvarchar(30)--部门经理
    )


    insert into #EnterPrise select '技术部','总经办','Tom'
    insert into #EnterPrise select '商务部','总经办','Jeffry'
    insert into #EnterPrise select '商务一部','商务部','ViVi'
    insert into #EnterPrise select '商务二部','商务部','Peter'
    insert into #EnterPrise select '程序组','技术部','GiGi'
    insert into #EnterPrise select '设计组','技术部','yoyo'
    insert into #EnterPrise select '专项组','程序组','Yue'
    insert into #EnterPrise select '总经办','','Boss'


    --查询部门经理是Tom的下面的部门名称
    ;with hgo as
    (
       select *,0 as rank from #EnterPrise where DepartManage='Tom'
       union all
       select h.*,h1.rank+1 from #EnterPrise h join hgo h1 on h.ParentDept=h1.Department
    )
    select * from hgo


    /*
    Department           ParentDept                DepartManage      rank
    --------------- -------------------- ----------------------- -----------
    技术部               总经办                    Tom               0
    程序组               技术部                    GiGi              1
    设计组               技术部                    yoyo              1
    专项组               程序组                    Yue               2
    */


    --查询部门经理是GiGi的上级部门名称
    ;with hgo as
    (
       select *,0 as rank from #EnterPrise where DepartManage='GiGi'
       union all
       select h.*,h1.rank+1 from #EnterPrise h join hgo h1 on h.Department=h1.ParentDept
    )
    select * from hgo


    /*
    Department               ParentDept          DepartManage    rank
    -------------------- ----------------------  -----------  -----------
    程序组                   技术部                 GiGi           0
    技术部                   总经办                 Tom            1
    总经办                                          Boss           2
    */

    如果递归次数大于100,只需在与cte连接的sql 语句的最后加上option (maxrecursion 0) 即可.默认递归

    次数为100,设为0表示没有次数限制. 

  • 相关阅读:
    C# 之 获取文件名及拓展名
    C# 之 日常积累(二)
    C# 之 OpenFileDialog的使用
    Linux系统中,main函数的执行过程
    linux线程的实现
    linux内核--进程与线程
    内核线程和进程的区别
    软中断和硬中断
    Linux 2.4.x内核软中断机制
    几种USB控制器类型:OHCI,UHCI,EHCI,xHCI
  • 原文地址:https://www.cnblogs.com/lgx5/p/6419170.html
Copyright © 2011-2022 走看看