首页 > 数据库 > Oracle > SQL Server 2008中的CTE递归查询
http://www.cnblogs.com/xfrog/archive/2010/10/10/1847462.html
今天基本搞清楚SQL Server中递归查询的实现方式,So,先记录下来。不过呢,个人觉得SQL
Server的递归查询相对于Oracle中的递归查询更加难以理解
。
从SQL Server
2005开始,我们可以直接通过CTE来支持递归查询,这对查询树形或层次结构的数据很有用。CTE即公用表表达式,虽然不恰当,但你可以将它看做成一个临时命名的结果集合。
我们先建立一个示例表,名称为MENU,表示菜单的层次结构:
表示的菜单层次如下:
文件
OK,先看CTE的语法:
例如:
WITH lmenu(name,senior)
as
(
)
我们定义了一个名称为lmenu的CTE,这样我们后续即可直接使用lmenu来查询,如:
SELECT * FROM lmenu
如果我们在定义CTE的查询语句中直接引用CTE表本身,则会形成递归查询,当然递归查询具有自己的特殊结构,下面的SQL通过递归查询获取每个菜单的层次深度:
结果:
name
--------------------------------------------------
--------------------------------------------------
-----------
文件
新建