使用公用表表达式(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的查询引用了自身,从而实现了递归查询,这种查询性能简直是之前自己写的那个递归函数根本无法比的。
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的查询引用了自身,从而实现了递归查询,这种查询性能简直是之前自己写的那个递归函数根本无法比的。
相关文章推荐
- 关于使用CTE(公用表表达式)的递归查询
- Sql学习第三天——SQL 关于使用CTE(公用表表达式)的递归查询
- [MSSQL]SQL 关于使用CTE(公用表表达式)的递归查询
- 关于使用CTE(公用表表达式)的递归查询
- [MSSQL]SQL 关于使用CTE(公用表表达式)的递归查询
- SQL Server 2005中使用公用表表达式的递归查询(CTE是个好东西)
- 使用公用表表达式的递归查询(CTE)
- SQL Server 2005中使用公用表表达式的递归查询(CTE是个好东西)
- 使用公用表表达式的递归查询(CTE)
- SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
- 使用公用表表达式(CTE)简化嵌套SQ with as 的使用(转)
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL
- 使用公用表表达式(CTE)简化嵌套SQL 和进行递归调用
- 使用公用表表达式的递归查询
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL(转载)
- 使用公用表表达式的递归查询
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL
- Sql学习第三天——SQL 关于CTE(公用表达式)的递归查询使用
- sql server使用cte实现树结构递归查询
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL[转帖]