sqlserver with 语法
生活随笔
收集整理的這篇文章主要介紹了
sqlserver with 语法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
with 語法
用來實現遞歸查詢,比如當要查詢部門時,查詢當前部門及下屬部門就要采用遞歸的查詢
| 1 | 0 | 總部 |
| 2 | 1 | 研發部 |
| 3 | 1 | 測試部 |
| 4 | 1 | 質量部 |
| 5 | 2 | 小組1 |
| 6 | 2 | 小組2 |
| 7 | 3 | 測試1 |
| 8 | 3 | 測試2 |
| 9 | 5 | 前端組 |
| 10 | 5 | 美工 |
要實現的效果:
| 2 | 1 | 研發部 | 0 |
| 5 | 2 | 小組1 | 1 |
| 6 | 2 | 小組2 | 1 |
| 9 | 5 | 前端組 | 2 |
| 10 | 5 | 美工 | 2 |
查詢sql:
with cte as (select Id,Pid,DeptName,0 as lvl from Departmentwhere Id = 2union allselect d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join Department don c.Id = d.Pid ) select * from cte執行過程:
遞歸CTE最少包含兩個查詢(也被稱為成員)。第一個查詢為定點成員,定點成員只是一個返回有效表的查詢,用于遞歸的基礎或定位點。第二個查詢被稱為遞歸成員,使該查詢稱為遞歸成員的是對CTE名稱的遞歸引用是觸發
首先定點成員 :
select Id,Pid,DeptName,0 as lvl from Department where Id = 2查詢出來的結果集為ID=2的一條數據
接下來此條數據作為第二個查詢的基礎 也就是cte
此時查出的結果集為 id為2的這一條數據和Department表作連接
| 2 | 1 | 研發部 | 0 |
| 5 | 2 | 小組1 | 1 |
| 6 | 2 | 小組2 | 1 |
同理 將得到的記錄(上面的id=5和id=6的2條數據作為 cte,id為2的是條件,不是本次的結果)再作為基礎,再與Department表作連接 得到
| 2 | 1 | 研發部 | 0 |
| 5 | 2 | 小組1 | 1 |
| 6 | 2 | 小組2 | 1 |
| 9 | 5 | 前端組 | 2 |
| 10 | 5 | 美工 | 2 |
依此類推 最后一次講上面id=9和id=10的記錄作為cte ,再與Department表作連接 , 此次的結果為空 ,遞歸結束。
總結
以上是生活随笔為你收集整理的sqlserver with 语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: movieclip颜色
- 下一篇: 老船履带工具使用方法_眉山小型履带车使用