SQL Server 2005中的CTE递归查询得到一棵树

本文介绍了如何在SQL Server 2005中利用Common Table Expression(CTE)进行递归查询,以构建一棵树形结构。通过示例展示了如何插入数据,并解释了递归查询的工作原理,强调了在递归成员中只能引用Tree表的字段。此外,还展示了如何通过添加OrderID字段解决插入新记录后的排序问题,确保树的正确展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       感觉这个CTE递归查询蛮好用的,先举个例子:

 

上面的SQL语句再次插入一条数据:

insert Tree values('网络1班','网络工程')

     运行结果如下图:

图1 运行结果

     注意点:貌似在递归成员处所选择的字段都必须Tree表的数据,而不能是CTE结果集中的除了Tree中没有而CTE中有的字段在这里才可以引用,比如字段TE。

    首先看下,遍历的第1条记录的SQL语句:

   获取的结果为:

   Name  Parent   TE    Levle

-------------------------------------

     大学    NULL   大学     0

   递归第2次所获取的结果集合的类SQL语句为:

   上面的CTE子查询的结果就是第一次递归查询的结果集,上面SQL运行结果为:

   同样的,将第二次递归查询的上面三条记录作为第三次查询的‘定位成员’:

  【这里要注意,上面的三条记录是从最后一条开始依次作为第三次递归的输入的,即第一条是ID=9的记录,接下来是7和2,关于第四次递归也类似】

   第三次递归类SQL语句

   结果如下:

其实每次递归的类SQL可为如下所示:

 第四次递归一次类推,最后所查询的结果为上面所有递归的union。

 续:在上面的SQ语句查询结果中,ID为10的记录应该要放在ID为4的后面。

 往数据表中再次添加两条记录:

insert Tree values('计科','计算机学院')
insert Tree values('我','网络1班') 

再次修改上面的SQL语句:

最后的结果为:

图2 运行结果

这样,无论用户插入多少条记录都可以进行按部门,按规律进行查询。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值