WEB开发网
开发学院数据库MSSQL Server Sql Server : CTE函数处理递归(WITH语法) 阅读

Sql Server : CTE函数处理递归(WITH语法)

 2009-05-13 10:28:33 来源:WEB开发网   
核心提示:我们在做分类处理的时候,总会遇到递归的处理,Sql Server : CTE函数处理递归(WITH语法),比如说地区就是一个例子,中国--北京--西城区,好理解!赶快试试吧!这是从上向下查,如果从下向上查,我们可以把这样的信息存储在一个数据表中,用ParentID区分根节点和叶子节点

我们在做分类处理的时候,总会遇到递归的处理,比如说地区就是一个例子,中国--北京--西城区,我们可以把这样的信息存储在一个数据表中,用ParentID区分根节点和叶子节点。假如我们要做导航,得到了”西城区”,但是还要得到他的父级,或夫父级,一种方式是用程序来处理,也是很简单,另一种方式就是用数据库的功能。既然数据库能完成这件事,何必在用程序呢?

在SqlServer2005以前的版本中,也能处理这种情况,不过当时用的是存储过程,代码也比较多,表设计的时候,还的加一个表示“深度”的字段,当时我也写过相关的文章,参见:

存储过程实现无限级分类(1)

存储过程实现无限级分类(2)

存储过程实现无限级分类(3)

但是,在学习SqlServer2005新加的特性的时候,注意到WITH语句能实现这样的功能,并且代码简单,简练,最重要的是好理解。

下面是一张递归的表结构图:

Sql Server : CTE函数处理递归(WITH语法)

里边的parentID记录的就是他们之间的关系;

比如我们要查询id = 10008,并且parentID 为10008的数据怎么办呢?如:

Sql Server : CTE函数处理递归(WITH语法)

呵呵,不留悬念了,直接上代码吧!其实挺容易理解的:

WITH CategoryInfo AS(


SELECT id,text,parentid FROM Recursive WHERE id = 10008


UNION ALL


SELECT a.id,a.text,a.parentid FROM Recursive AS a,CategoryInfo AS b WHERE a.parentid = b.id


)


SELECT * FROM CategoryInfo

看看是不是简单,简练,好理解!

赶快试试吧!

这是从上向下查,如果从下向上查,怎么查呢,自己举一反三吧!

Tags:Sql Server CTE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接