2013-12-09 60 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