2015-05-26 51 views
3

我有一个表,如下一些数据:显示嵌套的父子关系

ID  Name  ParentID 
----------------------------- 
1   A   NULL 
2   B   NULL 
3   C   1 
4   D   2 
5   E   3 

正如你可以看到E为碳的孩子这是我要寻找一个简单的SQL A的孩子查询可以返回一个字符串,如给出一个子ID,例如ID = 5,这为E应该有如下一些:

Data 
----- 
A -> C -> E 

我曾尝试下面的查询,但停留在前进的道路

SELECT a.ID, 
     a.Name, 
     COALESCE(b.Name, '->') AS 'ParentName' 
FROM MyTable AS a 
LEFT JOIN MyTable AS b ON a.ID = b.ID 
WHERE a.ID = 5 

任何援助将不胜感激。

回答

3

试试这个:

with cte as(
    select * from t where id = 5 
    union all 
    select t.id, t.name, t.pid from cte c 
    join t on c.pid = t.id) 
select replace(stuff((select '-' + name from cte 
order by id 
for xml path('')), 1, 1, ''), '-', '->') 

小提琴http://sqlfiddle.com/#!3/6fdde1/19

+0

感谢这..这是优秀的,正是我需要的。 –