2013-12-09 3 views
1

Я пытаюсь написать запрос для получения дочерних элементов под родительским идентификатором из таблицы #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 
Смежные вопросы