递归SQL查询以获取父项下的子项 - SQL Server 2008

时间:2013-12-09 05:08:59

标签: sql sql-server sql-server-2008

我正在尝试编写查询,以便从表#Temp中获取父ID下的子项。请查看下表#Temp

注意:父值为NULL,然后相应的子值为L1,需要找到从L1到L5的级别。

child | Parent
  c1      p1
  p1     NULL
  c2      p2
  p2      p3
  p4      p3
  p3     NULL

我正在寻找以下输出

 L1 | L2 | L3 | L4 | L5
 p1   c1  NULL NULL NULL
 p3   p2   c2  NULL NULL
 p3   p4  NULL NULL NULL

我尝试过这个查询

SELECT L1.child 'L1', 
       L2.child 'L2', 
       L3.child 'L3', 
       L4.child 'L4', 
       L5.child 'L5' 
FROM   #temp L1 
       INNER JOIN #temp L2 
               ON L2.parent = L1.child 
       INNER JOIN #temp L3 
               ON L3.parent = L2.child 
       INNER JOIN #temp L4 
               ON L4.parent = L3.child 
       INNER JOIN #temp L5 
               ON L5.parent = L4.child 
WHERE  L1.parent IS NULL 

但我没有得到预期的输出。请指教。提前谢谢!

1 个答案:

答案 0 :(得分:3)

将内部联接更改为左联接:

Select 
    L1.child 'L1', L2.child 'L2', L3.child 'L3', L4.child 'L4', L5.child 'L5'
from 
    #Temp L1
LEFT join 
    #Temp L2 ON L2.Parent = L1.child
LEFT join 
    #Temp L3 ON L3.Parent= L2.child
LEFT join 
    #Temp L4 ON L4.Parent= L3.child
LEFT join 
    #Temp L5 ON L5.Parent= L4.child
where 
    L1.Parent is null