简体   繁体   English

在主查询中使用相关子查询值

[英]Using correlated subquery value in main query

I am trying to use the query below (which works perfectly), as a subquery to an UPDATE statement, and need to reference the value CORRECT_DATE in that UPDATE statement. 我试图使用下面的查询(它完美地工作),作为UPDATE语句的子查询,并需要在该UPDATE语句中引用值CORRECT_DATE。 If I could successfully SELECT that value in this query, passing it up to the UPDATE would be easy, but I can't seem to select the correlated subquery value below AND use it in the inequality. 如果我可以在此查询中成功地选择该值,那么将其传递到UPDATE将很容易,但我似乎无法选择下面的相关子查询值并在不等式中使用它。

SELECT A.NAME, MAX(A.[START])
FROM dbo.TANK A
WHERE A.[CURRENT] = 0 AND A.[END] < (SELECT B.[START] AS CORRECT_DATE
                                          FROM dbo.TANK B
                         WHERE B.[CURRENT] = 1
                         AND A.NAME = B.NAME
                         AND A.TYPE = B.TYPE
                              AND A.COVER = B.COVER)

I have tried the following, but it doesnt recognize the alias in the WHERE clause: 我尝试了以下内容,但它不识别WHERE子句中的别名:

SELECT A.NAME, MAX(A.[START]), (SELECT B.[START] AS CORRECT_DATE
                                          FROM dbo.TANK B
                         WHERE B.[CURRENT] = 1
                         AND A.NAME = B.NAME
                         AND A.TYPE = B.TYPE
                              AND A.COVER = B.COVER) as subvalue
FROM dbo.TANK A
WHERE A.[CURRENT] = 0 AND A.[END] < subvalue

Why wouldn't you use a join? 你为什么不使用加入? Correlated subqueries are performance killers that should be avoided where possible. 相关子查询是应尽可能避免的性能杀手。

SELECT A.NAME
    , MAX(A.[START])
    , B.[START]                                           
FROM dbo.TANK A 
JOIN dbo.TANK B
    ON A.NAME = B.NAME 
    AND A.TYPE = B.TYPE
    AND A.COVER = B.COVER AND B.[CURRENT] = 1 
WHERE A.[CURRENT] = 0 AND A.[END] < B.[START]
     GROUP BY A.NAME, B.[START];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM