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