【问题标题】:Replace the subquery with JOIN/APPLY用 JOIN/APPLY 替换子查询
【发布时间】:2013-01-15 06:38:54
【问题描述】:

我有以下 SQL。

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),问题可以有父问题。

我想摆脱子查询。正确的做法是什么?

【问题讨论】:

    标签: sql sql-server join subquery apply


    【解决方案1】:

    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;
    

    【讨论】:

    • @Mahmound,原来的查询使用子查询来限制Answer(t2)中的结果集,新的sproc没有。
    • @Icerman 它应该以相同的方式工作,它会限制AND p.SharedQuestionId = t2.SharedQeustionId 的结果集,您能否发布一些解释此问题的三个表的示例数据。会有帮助的。
    • @Mahmound,我使用示例 datd 进行了验证。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2017-03-04
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2015-11-03
    • 2014-08-11
    相关资源
    最近更新 更多