这两个查询有什么区别?

时间:2009-11-23 10:46:16

标签: sql sql-server

我通过以下方式编写我的连接查询

    UPDATE  UPLOAD_TEMP
    SET     UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse,
    FROM    UPLOAD_TEMP t1
    INNER JOIN GB_RequiredFields t2 ON t1.State = t2.StateCode
                                      AND t1.County_Id = t2.CountyId
                                      AND t1.Group_code = t2.Doc_type_group_code

然而它也可以这样编写

    UPDATE  UPLOAD_TEMP
    SET     UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse,
    FROM    UPLOAD_TEMP t1
    INNER JOIN GB_RequiredFields t2 ON t1.State = t2.StateCode
    WHERE  t1.County_Id = t2.CountyId
       AND t1.Group_code = t2.Doc_type_group_code

两者之间是否存在差异,这是首选的编码方式。

2 个答案:

答案 0 :(得分:4)

这是一个古老的论点 - 是否在JOIN子句中指定其他WHERE参数或作为单独的WHERE。

我更喜欢定义 only 那些真正构成JOIN子句内部JOIN的参数的方法,以及稍后在WHERE子句中的所有其他参数。对我来说似乎更干净。

但我认为最终,在功能上,它是一样的 - 这只是个人偏好的问题,真的。

答案 1 :(得分:1)

两个查询都将具有相同的结果,并且您的sql-server应该以相同的方式处理它们。所以没有任何区别 - 只是你想要怎么做。 你甚至可以通过以下方式实现:

  UPDATE  UPLOAD_TEMP
    SET     UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse,

    FROM    UPLOAD_TEMP t1, GB_RequiredFields t2
    WHERE
             t1.State = t2.StateCode
             AND t1.County_Id = t2.CountyId
            AND t1.Group_code = t2.Doc_type_group_code