データベースに次のデータがあります。
Parent Child
101 102
101 103
101 104
101 105
101 106
私のパラメーターは106です。また、パラメーターを使用して、親である101の下にある他のすべての子を取得したいと考えています。クエリを作成する別の方法はありますか?
値@p0
のsiblingsを取得したい場合、単純な自己結合を使用できます。
SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0
ここでの不等節により、検索した値を含まない兄弟を確実に取得できます。必要に応じて取り外してください。
ただし、再帰について言及しているので、おそらく@p0
の親から始まるツリー全体が必要です。その場合、再帰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
SQL Fiddle例 データを使用 および 再帰CTEを示す追加データあり
SQL Authorityのブログに、再帰的なCTEを使用して階層クエリを実行する方法の非常に優れた説明があります
よろしく