zoukankan      html  css  js  c++  java
  • SQLServer树查询

           感觉这个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 运行结果

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

  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/mingjing/p/7136831.html
Copyright © 2011-2022 走看看