Supponendo che si desidera ottenere fratelli del valore @p0
, è possibile 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-uguali qui fa in modo che si ottiene fratelli non tra cui il valore che hai cercato Rimuoverlo se necessario.
SQL Fiddle example
Dal momento che si parla di ricorsione, però, forse si desidera che il intero albero partendo dal genitore del valore @p0
. In questo caso, è possibile utilizzare una CTE ricorsiva:
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 esempi using your data e with additional data to demonstrate the recursive CTE
fonte
2013-09-27 02:50:30
Una piccola spiegazione con il codice è sempre carina. –