1

ネストされた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
4

2 に答える 2

4

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 回呼び出されるのを回避する必要があります。

于 2011-02-14T16:30:01.990 に答える
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
于 2011-02-14T16:29:46.623 に答える