Ако приемем, че искате да получите братя и сестри от стойността @p0
, можете да използвате просто самосъединяване:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
Клаузата за неравенство тук гарантира, че получавате братя и сестри, които не включват стойността, която търсите. Премахнете го, ако е необходимо.
Тъй като обаче споменавате рекурсия, може би искате цялото дърво започвайки от родителя на стойността @p0
. В този случай можете да използвате рекурсивен 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 използване на вашите данни ис допълнителни данни за демонстриране на рекурсивния CTE