这两个查询有什么区别?

4

我正在按照以下方式编写我的联接查询

    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个回答

4

这是一个古老的争论 - 是在JOIN子句中指定额外的WHERE参数还是作为单独的WHERE。

我更喜欢在JOIN子句中仅定义真正构成JOIN的参数,而将其他所有内容放在WHERE子句中。对我来说,这样更清晰。

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


1

这两个查询将会得到相同的结果,你的SQL服务器应该以相同的方式处理它们。因此,它们之间没有任何区别 - 只是你想如何做而已。 你甚至可以按照以下方式进行:

  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

1
非常老式的JOIN。不良实践。 - gbn
1
我也不喜欢,但谁说这是坏习惯了?对于数据库管理系统来说并不重要,这只是为了可读性,而且主要受过去的做法影响。 - Pesse
1
@Pesse:嗯,旧式的外连接 = = 在 SQL Server 2008 之后已经被弃用了,所以你会有一个完全混乱的风格。 - gbn
哦,我不知道它已经被弃用了。谢谢你提供的信息。 - Pesse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接