2012-03-02 58 views
0

select * from MyTable给出以下结果, enter image description here递归在SQL Server 2008

现在我想如果我通过“胸”的ID来获得所有孩子的的IDS。

例如,如果我通过“ChestOne”的ID,我想下表

enter image description here

我尝试以下得到,但无法得到的结果

;WITH Temp_CTE AS 
(
SELECT 
    id 
    ,name 
    ,parent_id 
FROM dbo.MyTable 
WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9' 
UNION ALL 
SELECT 
    CS.id 
    ,CS.name 
    ,CS.parent_id 
FROM dbo.MyTable CS 
INNER JOIN Temp_CTE ON CS.id = Temp_CTE.parent_id 

) 
SELECT * FROM Temp_CTE 

如何在SQL Server 2008中执行此操作?

+2

试图改变各地加盟。 'INNER JOIN Temp_CTE ON CS.parent_id = Temp_CTE.id' – 2012-03-02 07:34:11

回答

2
declare @MyTable table 
(
    id char(2), 
    name varchar(10), 
    parent_id char(2) 
) 

insert into @MyTable values 
('54', 'Chest Two', '12'), 
('CD', 'InCOne', '6D'), 
('6D', 'ChestOne', '12'), 
('12', 'Chest', '00') 

;WITH Temp_CTE AS 
(
SELECT 
    id 
    ,name 
    ,parent_id 
FROM @MyTable 
WHERE id = '6D' 
UNION ALL 
SELECT 
    CS.id 
    ,CS.name 
    ,CS.parent_id 
FROM @MyTable CS 
INNER JOIN Temp_CTE ON CS.parent_id = Temp_CTE.id 

) 
SELECT * FROM Temp_CTE 

结果:

id name  parent_id 
---- ---------- --------- 
6D ChestOne 12 
CD InCOne  6D 
2

我觉得应该是:

;WITH Temp_CTE AS 
(
SELECT 
    id 
    ,name 
    ,parent_id 
FROM dbo.MyTable 
WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9' 
UNION ALL 
SELECT 
    CS.id 
    ,CS.name 
    ,CS.parent_id 
FROM dbo.MyTable CS 
INNER JOIN Temp_CTE ON CS.parent_id = Temp_CTE.id 

) 
SELECT * FROM Temp_CTE