Comment puis-je suivre les relations ID / ParentID entre les lignes de la table?

J'ai une table comme les records(ID, ParentID) contenant ces données:

 ID ParentID 1 null 2 1 3 2 4 2 5 3 6 null 7 6 

Si vous dessinez cette table dans la hiérarchie en tant que famille, 1,2,3,4,5 seront liés les uns aux autres.

Je veux find un moyen de passer un ID (comme 3 ) de telle sorte qu'il me donne les autres membres de la famille. J'utilise C # et SQL, soit fera – je veux find un résultat comme ceci:

 3 - result 1,2,4,5 2 - result 1,3,4,5 6 - result 7 and so on 

Je veux find le parent de la pièce d'identité que je passe, les grands-parents, les enfants et les petits-enfants (comme dans mon exemple).

Comment créer une requête récursive dans MSSQL 2005?

J'espère que cela t'aides 🙂

Cela devrait le faire.

 CREATE TABLE #Test ( ID int, ParentID int ) INSERT #Test VALUES (1, null) INSERT #Test VALUES (2, 1) INSERT #Test VALUES (3, 2) INSERT #Test VALUES (4, 2) INSERT #Test VALUES (5, 3) INSERT #Test VALUES (6, null) INSERT #Test VALUES (7, 6) DECLARE @QueryId int SET @QueryId = 2 -- My parents SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID AND [ParentID] IS NOT NULL UNION -- My parent's parents SELECT [ParentID] FROM #Test WHERE [ID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ParentID] IS NOT NULL UNION -- My parent's children (ie my siblings), excluding me SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ID] != @QueryID UNION -- My chidren SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId UNION -- My chidren's children SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId) DROP TABLE #Test 

Vous voudrez peut-être regarder le type de hiérarchie qui correspond le mieux à votre problème. Bien que cela soit uniquement disponible avec SQL Server 2008