sqlserver with 语法

with 语法

用来实现递归查询,比如当要查询部门时,查询当前部门及下属部门就要采用递归的查询

IdPidDeptName
10总部
21研发部
31测试部
41质量部
52小组1
62小组2
73测试1
83测试2
95前端组
105美工

要实现的效果:

IdPidDeptNamelvl
21研发部0
52小组11
62小组21
95前端组2
105美工2

查询sql:

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

执行过程:
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发

首先定点成员 :

select Id,Pid,DeptName,0 as lvl from Department where Id = 2

查询出来的结果集为ID=2的一条数据
接下来此条数据作为第二个查询的基础 也就是cte

select d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join   Department d on c.Id = d.Pid

此时查出的结果集为 id为2的这一条数据和Department表作连接

IdPidDeptNamelvl
21研发部0
52小组11
62小组21

同理 将得到的记录(上面的id=5和id=6的2条数据作为 cte,id为2的是条件,不是本次的结果)再作为基础,再与Department表作连接 得到

IdPidDeptNamelvl
21研发部0
52小组11
62小组21
95前端组2
105美工2

依此类推 最后一次讲上面id=9和id=10的记录作为cte ,再与Department表作连接 , 此次的结果为空 ,递归结束。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值