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.
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