Za předpokladu, že chcete získat sourozence z hodnoty @p0
, můžete použít jednoduché vlastní připojení:
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
Klauzule nerovná se zde zajišťuje, že získáte sourozence, kteří nezahrnují hodnotu, kterou jste hledali. V případě potřeby jej odstraňte.
Protože zmiňujete rekurzi, možná budete chtít celý strom počínaje rodičem hodnoty @p0
. V takovém případě můžete použít rekurzivní CTE:
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
Příklady SQL Fiddle používání vašich dat as dalšími údaji k demonstraci rekurzivního CTE