Ervan uitgaande dat je broers en zussen wilt krijgen van de waarde @p0
, kunt u een eenvoudige self-join gebruiken:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
De niet-gelijkwaardige clausule hier zorgt ervoor dat je broers en zussen krijgt die niet de waarde bevatten waarnaar je hebt gezocht. Verwijder het indien nodig.
Aangezien je echter recursie noemt, wil je misschien de hele boom beginnend bij de ouder van de waarde @p0
. In dat geval kunt u een recursieve CTE gebruiken:
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
Voorbeelden van SQL Fiddle het gebruik van uw gegevens enmet aanvullende gegevens om de recursieve CTE aan te tonen