Förutsatt att du vill skaffa syskon av värdet @p0
, kan du använda en enkel självanslutning:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
Inte-lika klausulen här ser till att du får syskon som inte inkluderar värdet du sökte efter. Ta bort den vid behov.
Eftersom du nämner rekursion kanske du vill ha hela trädet börjar med föräldern för värdet @p0
. I så fall kan du använda en rekursiv CTE:
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
SQL Fiddle-exempel användning av dina data ochmed ytterligare data för att demonstrera den rekursiva CTE