Asumiendo que quieres tener hermanos del valor @p0
, puede usar una autocombinación 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 cláusula de no igualdad aquí asegura que obtenga hermanos sin incluir el valor que buscó. Quítelo según sea necesario.
Sin embargo, dado que menciona la recursividad, tal vez desee el árbol completo comenzando en el padre del valor @p0
. En cuyo caso, puede usar un CTE recursivo:
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
Ejemplos de SQL Fiddle usando sus datos y con datos adicionales para demostrar el CTE recursivo