您的位置:首页 > 其它

使用公用表表达式(CTE)做递归查询

2010-06-09 21:04 316 查看
项目中遇到了查询所有子部门,更确切的说是后代部门。通过parentid这个关系来查询。之前自己想到的办法是使用递归函数来查询。但是性能很差,而且结果中有重复现象,目前没有找到结果重复的原因。由于该函数在做深层次查询性能太差,所以到网上搜索解决方案。最后发现了一种CTE递归查询的方法,老实说,一开始并没有搞懂是如何实现了递归的功能的。后来查了一下msdn:公用表表达式可以包括对自身的引用。

with temp(departmentId,ParentId)

as(

select departmentId,ParentId from Departments

where departmentid=1

union all

select d.departmentId,d.ParentId

from Departments d inner join temp t on d.parentid=t.Departmentid

)

select DepartmentID from temp

这样一个查询我们看到在union all 后面的查询是让department和CTE temp做inner join 而本身CTE他来源于基本查询 ,在这里用于生成CTE temp的查询引用了自身,从而实现了递归查询,这种查询性能简直是之前自己写的那个递归函数根本无法比的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: