SQL递归查询(with cte as)

with cte as
(
    select Id,Pid,DeptName,0 as lvl from Department
    where Id = 2
    union all
    select d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join Department d
    on c.Id = d.Pid
)
select * from cte
1 表结构
Id          Pid         DeptName
----------- ----------- --------------------------------------------------
          0           总部
          1           研发部
          1           测试部
          1           质量部
          2           小组1
          2           小组2
          3           测试1
          3           测试2
          5           前端组
         5           美工
2 查询结果 查部门ID=2的所有下级部门和本级

Id          Pid         DeptName                                           lvl

----------- ----------- -------------------------------------------------- -----------

1           研发部                                               0

2           小组1                                                1

2           小组2                                                1

5           前端组                                               2

5           美工                                                  2

(5 行受影响)

3 原理(摘自网上)

  递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。

递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

最新文章

  1. DropDownList默认选中
  2. php使用内置的mcrypt_encrypt和mcrypt_decrypt进行字符串加密解密
  3. spring mvc的拦截器
  4. @font-face 的用法
  5. UOJ35 后缀数组(模板)
  6. mesos资源动态分配测试
  7. mysql设置时区方法
  8. HDOJ-三部曲一(搜索、数学)-1002-Children of the Candy Corn
  9. Starling性能优化技巧十五则
  10. VS中无法加入断点进行调试解决方案
  11. 201521123044 《Java程序设计》第1周学习总结
  12. nginx服务器的作用与简单搭建(windows)
  13. C#语法——泛型的多种应用
  14. 新萌渗透测试入门DVWA 教程1:环境搭建
  15. WebStorm for Mac(Web 前端开发工具)破解版安装
  16. L293 给地球降温
  17. tomcat部署war包
  18. GOOGLE CODE ANDROID 开源项目 集合
  19. vs2017诊断工具
  20. 【IDEA】 Can't Update No tracked branch configured for branch master or the branch doesn't exist. To make your branch track a remote branch call, for example, git branch --set-upstream-to origin/master

热门文章

  1. OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow
  2. http-proxy-middleware及express实现反向代理
  3. 如何git revert merge commit?
  4. Javescript——API连接 && json数据处理(待续)
  5. Mysql常见索引介绍
  6. jenkins的pipeline拉取指定分支的代码
  7. jenkins:构建机器为windows,部署机器为linux
  8. DLT(Direct Linear Transform)算法
  9. redis 设置后台守护运行的两种方式
  10. C#基础知识学习 linq 和拉姆表达式一