Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir tous les enfants d'un parent à l'aide d'une requête MSSQL

En supposant que vous vouliez obtenir des frères et sœurs de la valeur @p0 , vous pouvez utiliser une jointure réflexive simple :

SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

La clause non égale ici garantit que vous obtenez des frères et sœurs n'incluant pas la valeur que vous avez recherchée. Supprimez-le si nécessaire.

Exemple SQL Fiddle

Puisque vous mentionnez la récursivité, vous voulez peut-être l'arbre entier commençant au parent de la valeur @p0 . Dans ce cas, vous pouvez utiliser un CTE récursif :

WITH parent AS (
    SELECT Parent
    FROM Table1
    WHERE Child = @p0
), tree AS (
    SELECT x.Parent, x.Child
    FROM Table1 x
    INNER JOIN parent ON x.Parent = parent.Parent
    UNION ALL
    SELECT y.Parent, y.Child
    FROM Table1 y
    INNER JOIN tree t ON y.Parent = t.Child
)
SELECT Parent, Child
FROM tree

Exemples SQL Fiddle utilisant vos données etavec des données supplémentaires pour démontrer le CTE récursif