2010-11-15 7 views
2

J'ai une table avec une telle structure.Comment sélectionner les ID parents

ElementId | ParentId 
------------------- 
1   | NULL 
2   | 1 
3   | 2 
4   | 3 

Disons que l'élément courant a Id 4. Je veux sélectionner tous les ids parents. Le résultat devrait être: 3, 2, 1

Comment puis-je le faire? DB est MSSQL

Répondre

2

Vous pouvez utiliser des requêtes récursives pour cela: http://msdn.microsoft.com/en-us/library/aa175801(SQL.80).aspx

Vous pouvez l'utiliser comme ceci:

with Hierachy(ElementID, ParentID, Level) as (
    select ElementID, ParentID, 0 as Level 
    from table t 
    where t.ElementID = X -- insert parameter here 
    union all 
    select t.ElementID, t.ParentID, th.Level + 1 
    from table t 
    inner join Hierachy th 
    on t.ParentId = th.ElementID 
) 
select ElementID, ParentID 
from Hierachy 
where Level > 0 
+1

Fonctionne quand vous changez de p aramètres ici sur t.ParentId = th.ElementID –

1

Je pense que ce serait peut-être plus facile de faire ce qui suit:

while parent != NULL 
    get parent of current element 

Je ne peux pas penser à une façon de le faire en SQL qui ne serait pas causer des problèmes sur des bases de données plus grandes.

-1

si vous voulez essayer pur sql:

select ParentId from myTable Desc 

qui travaillerait dans une base MySQL ... vous devrez peut-être modifier l'élément Desc (trier par ordre décroissant)

Questions connexes