ネストされたselectステートメントをそれ自体と結合することは可能ですか(2回書き出して2回実行する必要はありません)
このようなものが理想的です
SELECT P.Child, P.Parent, Q.Parent AS GrandParent
FROM (SELECT Child, Parent FROM something-complex) AS P
LEFT JOIN P AS Q ON Q.Child = P.Parent
50%可能です。CTE を使用して 2 回書き込むことを回避できますが、それでも 2 回実行されます。
;WITH p
AS (SELECT child,
parent
FROM something-complex)
SELECT p.child,
p.parent,
q.parent AS grandparent
FROM p
LEFT JOIN p AS q
ON q.child = p.parent
クエリが高価な場合は、クエリをテーブル変数または#temp
テーブルに実体化して、自己結合によって基になるクエリが 2 回呼び出されるのを回避する必要があります。
共通のテーブル式を使用できます。
WITH P AS (SELECT Child, Parent FROM something-complex)
SELECT P.Child, P.Parent, Q.Parent as GrandParent
LEFT JOIN P AS Q ON Q.Child = P.Parent