sql >> Base de Datos >  >> RDS >> Sqlserver

Obtener todos los hijos de un padre usando la consulta MSSQL

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.

Ejemplo de SQL Fiddle

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