Tsql T-SQL中嵌套select查询的自连接

Tsql T-SQL中嵌套select查询的自连接,tsql,self-join,Tsql,Self Join,是否可以将嵌套的select语句与其自身连接起来(无需写出两次并运行两次) 像这样的东西会很理想 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 您可以使用公共表表达式: WITH P AS (SELECT Child, Parent FROM somet

是否可以将嵌套的select语句与其自身连接起来(无需写出两次并运行两次)

像这样的东西会很理想

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

您可以使用公共表表达式:

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

您可以使用公共表表达式:

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

50%的可能性。您可以使用CTE避免写入两次,但它仍将执行两次

;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
表,以避免自连接导致对基础查询的两次调用。

50%可能。您可以使用CTE避免写入两次,但它仍将执行两次

;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
表,以避免自连接导致对基础查询的两次调用