查询树形的根节点
2015-09-14 21:34
309 查看
数据库环境:SQL SERVER 2005
有一个test表,其表结构及数据如下图1。其中,id是主键,mid是当前节点,pid是父节点。
要求:查出每个节点的根节点,如图2所示。
View Code
综合整个SQL,test表总共被扫描了4次才实现结果。期待有大神提出更好的解决方法。
有一个test表,其表结构及数据如下图1。其中,id是主键,mid是当前节点,pid是父节点。
要求:查出每个节点的根节点,如图2所示。
,/*从根节点往下递归*/ x2 ( id, mid, pid, rid, way ) AS ( SELECT t1.id , t1.mid , t1.pid , CONVERT(VARCHAR(10), t1.pid) AS rid , CONVERT(VARCHAR(20), t1.pid + ',' + t1.mid) AS way FROM x1 t1 WHERE t1.root_flag IS NULL UNION ALL SELECT t1.id , t1.mid , t1.pid , CONVERT(VARCHAR(10), LEFT(t2.way, CHARINDEX(',', t2.way) - 1)) AS rid , CONVERT(VARCHAR(20), t2.way + ',' + t1.mid) AS way FROM x1 t1 INNER JOIN x2 t2 ON t2.mid = t1.pid ) SELECT id , mid , pid , rid FROM x2 ORDER BY id
View Code
综合整个SQL,test表总共被扫描了4次才实现结果。期待有大神提出更好的解决方法。
相关文章推荐
- 跨域分享
- sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
- Android网络连接----使用URLConnection实现从服务器上下载
- 其节短、其势险
- Gradle in Android Studio (1) - 构建系统概述
- Android第九讲——网络(一)
- jdbc
- linux 设备驱动之数据类型
- uva 10817 Headmaster's Headache 状压dp
- xml字符串转字符串树
- Android中如何获取屏幕的高度和宽度
- UILabel添加点击事件
- How to use Endpoint.publish(Object) ?
- 错误小结
- 感知器算法
- Nuget发布与dll文件引用
- imfong.com,我的新博客地址
- linux内核学习(一步一步走)——内核概述
- PackageManager的使用
- 字符串类型