Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obtendo todos os filhos de um pai usando a consulta MSSQL


Supondo que você queira obter irmãos do valor @p0 , você pode usar uma auto-junção simples:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

A cláusula de não igualdade aqui garante que você obtenha irmãos sem incluir o valor que você pesquisou. Remova-o conforme necessário.

Exemplo do SQL Fiddle

Já que você mencionou recursão, talvez você queira a árvore inteira começando no pai do valor @p0 . Nesse caso, você pode usar um 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

Exemplos do SQL Fiddle usando seus dados ecom dados adicionais para demonstrar o CTE recursivo