2011-06-17 179 views
2

研究員, 我有一個查詢,如下所示:避免子查詢

SELECT A.ID, B.ID, (HUGE SUBQUERY) as HS 
FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID 
WHERE (HUGE SUBQUERY) > 0 

我想避免重複子查詢。 有什麼辦法重寫我何至於像

WHERE HS > 0 

或者,我必須把我的子查詢轉換爲連接?

+0

爲什麼你會想要避免子查詢的加入? –

+0

你可以發佈「巨大的子查詢」,因爲不知道它是什麼意思,我們只能猜測:) – AbstractChaos

回答

5

你可以使用一個CTE

WITH cteHS AS (
    SELECT xxx AS Value 
     FROM Huge Subquery 
) 
SELECT A.ID, B.ID, cteHS.Value as HS 
    FROM TABLE_A, cteHS 
     JOIN TABLE_B ON A.ID = B.ID 
    WHERE cteHS.Value > 0 
6

看一下使用條款:

WITH HS AS (Huge subquery) 

SELECT A.ID, B.ID, HS 
FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID 
WHERE HS > 0 

OR

SELECT * 
FROM 
(
    SELECT A.ID, B.ID, (HUGE SUBQUERY) as HS 
    FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID 
) 
WHERE HS > 0 
+0

我只是拉起SSMS寫出來。做得好。 – websch01ar

+1

SO聲譽與你的CPU能力非常相關:) –

+0

它可能是所有的虛擬機運行速度都放緩了。我需要儘快修復 – websch01ar