2013-12-09 36 views
1

我想写查询来获取表中的父母id从子#Temp下的孩子。请找下表#Temp递归SQL查询来获取父母下的孩子 - SQL Server 2008

注意:父值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 

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

+0

你得到什么输出。你能把它粘贴在这里吗? – Aditya

回答

3

变化innerjoin左连接:

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