Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottenere tutti i figli di un genitore utilizzando la query MSSQL

Supponendo che tu voglia avere fratelli del valore @p0 , puoi utilizzare un semplice self-join:

SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

La clausola di non parità qui ti assicura che i fratelli non includano il valore che hai cercato. Rimuovilo se necessario.

Esempio SQL Fiddle

Dato che hai menzionato la ricorsione, forse vuoi l'intero albero a partire dal genitore del valore @p0 . In tal caso, puoi utilizzare un CTE ricorsivo:

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

Esempi di SQL Fiddle utilizzando i tuoi dati econ dati aggiuntivi per dimostrare il CTE ricorsivo