SQL递归查询(with as)
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。
轉載于:https://www.cnblogs.com/nxxshxf/p/5590911.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的SQL递归查询(with as)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “组织能力”到底是什么?zz
- 下一篇: 方法:查询MongoDB数据库中最新一条