【问题标题】:Inner join with WHERE clause affecting second join带有影响第二次连接的 WHERE 子句的内部连接
【发布时间】:2013-03-19 01:27:50
【问题描述】:

我有这个查询,顶部的内部连接工作正常,但是当我添加第二个连接时,我在“INNER”附近收到不正确的语法,有人知道为什么吗?

SELECT  Time_ID,
    Site_Type_ID,
    SUM (staging.dbo.incoming_measure.ring_time) AS Ring_Time,
    SUM (staging.dbo.incoming_measure.hold_time) As Hold_Time,
    SUM (staging.dbo.incoming_measure.talk_time) AS Talk_Time,
    SUM (staging.dbo.incoming_measure.acw_time) AS ACW_Time
FROM staging.dbo.incoming_measure
      INNER JOIN
   (SELECT Time_ID FROM datamartend.dbo.Time_Dim ) TimeID
      ON TimeID.Time_ID = incoming_measure.StartTime

      INNER JOIN 
   (SELECT Site_Type_ID, Site_Type_Code FROM datamartend.dbo.Site_Type_dim) SiteID
      ON SiteID.Site_Type_ID = incoming_measure.DBID

WHERE StartTimeDate BETWEEN StartTimeDate AND EndTimeDate  
   AND
WHERE SiteId.Site_type_code = incoming_measure.DBID

GROUP BY time_id, site_type_id

【问题讨论】:

    标签: sql syntax-error inner-join where-clause


    【解决方案1】:

    您必须将WHERE 移到GROUP BY 上方:

    WHERE StartTimeDate BETWEEN StartTimeDate AND EndTimeDate
    AND SiteId.Site_type_code = incoming_measure.DBID
    
    Group by time_id, site_type_id
    

    【讨论】:

    • 所以我总共会有 4 个内部连接,每个都有一个 WHERE 子句,您建议将所有 WHERE 子句放在底部?
    • @RichardC - 我在上面的查询中只看到 2 个内部连接。你只能有一个WHERE 子句。但是,是的,WHERE 会跟踪您的所有加入。
    • 抱歉,我希望在每个单独的内部查询中都有一个 where 子句,这可能吗?我已经编辑了上面的代码
    • @RichardC - 你必须删除第二个WHERE。看我的回答。
    • @RichardC 只需删除第二个WHERE - 就其价值而言,SO 不是了解查询的所有部分应该去哪里的合适地方。有相关文档。
    猜你喜欢
    • 2011-01-01
    • 2012-09-04
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多