2013-01-15 47 views
1

我有以下SQL。用JOIN/APPLY替換子查詢

SELECT t0.QustionId, t1.QuestionText, t2.AnswerText FROM 
ActiveQuestion AS t0 
INNER JOIN Question AS t1 
    ON t1.QuestionId = ActiveQuestion.QuestionId 
LEFT OUTER JOIN Answer AS t2 
    ON t2.SectionId = t0.SectionId 
    AND t1.ParentId IN 
      (SELECT QuestionId 
        FROM Question WHERE SharedQuestionId = t2.SharedQeustionId) 

問題可以共享(具有相同的SharedQuestionId),問題可以有父問題。

我想擺脫子查詢。什麼是正確的方法來做到這一點?

回答

2

JOINQuestion一個更多的時間用不同的別名:

SELECT 
    t0.QustionId, 
    t1.QuestionText, 
    t2.AnswerText, 
    p.questionI ParentQuestionId 
FROM ActiveQuestion  AS t0 
INNER JOIN Question  AS t1 ON t1.QuestionId  = ActiveQuestion.QuestionId 
LEFT OUTER JOIN Answer AS t2 ON t2.SectionId  = t0.SectionId 
LEFT OUTER JOIN Question AS p ON t1.ParentId  = p.QuestionId 
           AND p.SharedQuestionId = t2.SharedQeustionId; 
+0

@Mahmound,原來的查詢中使用子查詢來限制結果答案(T2)設置,新的存儲過程沒有。 – Icerman

+1

@Icerman它應該以相同的方式工作,它會限制結果集與'AND p.SharedQuestionId = t2.SharedQeustionId',你可以請張貼一些示例數據爲三個表解釋這個問題。這將有所幫助。 –

+0

@Mahmound,我使用示例datd進行了驗證。謝謝! – Icerman