SQL中的CTE,查询所有的子集(子集的子集)比游标效率高

今天闲来无事,就说说Sqlserver中CTE的用法

其实CTE我更多的可以把他当作是一种临时表,他方便你进行循环性的操作。但是他比临时表使用起来要方便一些:首先我们举个例子:要查询一个栏目表 但是这个栏目表的数据库设计的时候使用的这样的一个结构

id   M_name  parentID

1    name_1    0
2    name_2    1
3    name_3    2
4    name_4    3
5    name_5    4

 

如果我需要查询一个栏目的下面的所有的子栏目,你会怎么做呢?建一个一个临时表,然后把第一条数据放进去然后游标对临时表进行遍历操作,然后把遍历到的数据插入到里面(这个时候,他会继续进行遍历新插入的数据的)。首先我说这个的方法是可取的但是效率是非常低下的。在SQL2005以后就有了CTE这样的一个概念,他对此类操作非常的简单,代码如下:

with myCte as
(
select * from myTt where id=2
union all
select myTt.* from  myTt
    inner join myCte on  myTt.parentid=myCte.id
)
select *from myCte

查询数据如下:

id   M_name  parentID

2    name_2    1
3    name_3    2
4    name_4    3
5    name_5    4

 

查询ID为2的所有的子栏目。从这里我们可以看到他的代码量非常的简化,对于内部操作有没有使用游标这些我还没有深入研究过,希望有晓得的人能跟我联系:QQ:982147279

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值