Zakładając, że chcesz mieć rodzeństwo wartości @p0
, możesz użyć prostego samodzielnego łączenia:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
Klauzula not-equal zapewnia, że otrzymasz rodzeństwo bez wartości, której szukałeś. Usuń go w razie potrzeby.
Skoro jednak wspominasz o rekurencji, być może chcesz całe drzewo zaczynając od rodzica wartości @p0
. W takim przypadku możesz użyć rekurencyjnego 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
Przykłady SQL Fiddle korzystanie z danych iz dodatkowymi danymi demonstrującymi rekurencyjne CTE