SQL递归查询

在开发中,常常有些数据结构是树类型的,查询数据的时候可能就要知道某一行记录在树结构中属于哪一个层级上,那么查询的时候就需要用到递归,当然如果是层级是确定的,用其他方法也是可以实现的。MSSQL提供了with as 查询,可以很容易实现这样一个需求。下面有一个表结构,是记录了商品的品类的表。

那么实现的过程是这样的

再来看一下表的数据

好,那exec  proc_Category_QueryAll就得到了下面的结果

其中lev就是通过递归计算出来,当前行记录处于数结构的层级,从0开始计算。

这里有个注意点,这个查询包含了两个查询语句,第一个select查询的是种子集合,第二个是依据第一个种子集合去category表查询符合条件的数据合并到categorys中,直到第二个查询查询到的数据集为空,那么结束递归,值得注意的是,第一个和第二个查询的列目数要一致,否则执行出错,第二,数据本身不能包含死循环,否则达到循环层数(100)停止执行。

 

posted @ 2016-09-10 12:47  牧羊人-hunter  阅读(134)  评论(0)    收藏  举报