2016-09-21 3 views
0

Ich habe die folgende Tabelle Studentschreiben Voll subordintion Kette

id boss_id name age 
1 NULL NEW_A 10 
2 1  NEW_A 12 
3 1  NEW_A 14 
4 3  NEW_A 16 
5 3  NEW_A 18 
6 5  NEW_A 20 
7 1  NEW_B 22 
8 1  NEW_B 24 
9 8  NEW_B 26 
10 9  NEW_B 28 
11 4  NEW_B 44 

Die folgende Abfrage

select s.id as student, boss.id as boss from Student s, Student boss 
where s.boss_id = boss.id --and s.id = 11 
order by s.id 

ruft

2 1 
3 1 
4 3 
5 3 
6 5 
7 1 
8 1 
9 8 
10 9 
11 4 

ich eine ganze Kette Unterordnungs

zurückkehren wollen Exa mple für Student 11 sollte es

sein

Sql erlauben, Abfrage nach meinen Bedürfnissen zu schreiben?

+0

was die dbms verwendet? –

+0

@vkp Ich benutze ms sql, aber ich würde universal sql – gstackoverflow

+0

das Ding ist das Universum ist zu groß, und nicht jeder verwendet die gleichen Werkzeuge –

Antwort

2

Sie können dies mit einem rekursiven CTE:

;With Cte As 
(
    Select T.id, T.boss_id 
    From YourTable T 
    Where T.Id = 11 
Union All 
    Select T.id, T.boss_id 
    From YourTable T 
    Join Cte   C On C.boss_id = T.id 
          And T.boss_id Is Not Null 
) 
Select id, boss_id 
From Cte 

id boss_id 
11 4 
4 3 
3 1 

SQL Fiddle Live Demo

+0

Ich weiß nicht, wie es aber funktioniert wirklich – gstackoverflow