SqlServer:CTE函数处理递归(WITH语法)
来源:互联网 发布:环球易购 知乎 编辑:程序博客网 时间:2024/04/30 17:46
需要用到递归查询。。。
http://www.cnblogs.com/xbf321/archive/2009/04/30/1446833.html
我们在做分类处理的时候,总会遇到递归的处理,比如说地区就是一个例子,中国--北京--西城区,我们可以把这样的信息存储在一个数据表中,用ParentID区分根节点和叶子节点。假如我们要做导航,得到了”西城区”,但是还要得到他的父级,或夫父级,一种方式是用程序来处理,也是很简单,另一种方式就是用数据库的功能。既然数据库能完成这件事,何必在用程序呢?
在SqlServer2005以前的版本中,也能处理这种情况,不过当时用的是存储过程,代码也比较多,表设计的时候,还的加一个表示“深度”的字段,当时我也写过相关的文章,参见:
存储过程实现无限级分类(1)
存储过程实现无限级分类(2)
存储过程实现无限级分类(3)
但是,在学习SqlServer2005新加的特性的时候,注意到WITH语句能实现这样的功能,并且代码简单,简练,最重要的是好理解。
下面是一张递归的表结构图:
里边的parentID记录的就是他们之间的关系;
比如我们要查询id = 10008,并且parentID 为10008的数据怎么办呢?如:
呵呵,不留悬念了,直接上代码吧!其实挺容易理解的:
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
看看是不是简单,简练,好理解!
赶快试试吧!
这是从上向下查,如果从下向上查,怎么查呢,自己举一反三吧!
- SqlServer:CTE函数处理递归(WITH语法)
- With (CTE、递归CTE)
- WITH CTE递归查询
- 【sqlserver】CTE 递归使用DEMO
- SQL CTE WITH 递归查询
- SQL With (递归CTE查询)
- Sqlserver普通的CTE递归示例--【叶子】
- Sqlserver普通的CTE递归示例
- SqlServer 实现CTE(递归)查询
- 【sqlserver】一个CTE递归调用案例优化
- SQL With(递归 CTE 查询)
- SQL递归查询(with cte as)
- SQL递归查询(with cte as)
- SQL递归CTE查询(;with xxx as)
- SQL With(递归 CTE 查询)
- CTE递归
- CTE 递归
- SQLServer CTE递归和循环对比的优势--典型案例
- 关于.NET接口的一些资料
- 晒一种数据库设计
- mysql索引
- 用别人喜欢的方式去爱他们
- 创建透明画刷
- SqlServer:CTE函数处理递归(WITH语法)
- Shell中操作数据库
- 特殊字符处理
- Thread
- lucene 漫谈(一)
- test blog
- 修改MyEclipes的发布路径
- 文本搜索引擎 和 视频搜索引擎 哪个好?
- Java Exception 处理之最佳实践