T-SQL中的递归查询
表结构
ProductCategory
CategoryID,Level,ParentCategoryID
数据
1,1,-1
2,1,-1
3,2,1
4,3,3
5,2,2
6,4,5
T-SQL
WITH CategoryTemp(CategoryID,ParentCategoryID)--临时表用来保存查到的Category
(
SELECT CategoryID,ParentCategoryID FROM ProductCategory WHERE ParentCategoryID<=0--将所有的第一层查出来作为初始数据,需要查第几层或者哪个ParentCategoryID下面所有的N层,把ParentCategoryID赋相关的值即可
UNION ALL--查询N层
SELECT pc.CategoryID,ParentCategoryID FROM ProductCategory pc
LEFT JOIN CategoryTemp ct ON pc.ParentCategoryID=ct.CategoryID
WHERE ParentCategoryID>0--因为第一层前面已经查出来了,所以这里把第一层筛选掉
)
SELECT CategoryID,ParentCategoryID FROM CategoryTemp
结果
1,-1
2,-1
3,1
4,3
5,2
6,5
如果把ParentCategoryID赋为2,结果则为
5,2
6,5