您的位置:首页 > 其它

查询树形的根节点

2015-09-14 21:34 309 查看
数据库环境:SQL SERVER 2005

  有一个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次才实现结果。期待有大神提出更好的解决方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: