2009-11-23 146 views
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 

连接查询有两个和之间的差额,以代码的首选方式。

回答

4

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

我更喜欢定义的方法这些参数确实组成了JOIN子句中的JOIN,以及后面的WHERE子句中的所有其他内容。对我来说似乎更清洁。

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

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 
+1

非常旧的风格加入。糟糕的做法。 – gbn 2009-11-23 10:55:45

+1

我也不喜欢它,但谁说坏习惯?这对于DBMS来说并不重要,它只是为了便于阅读,而且主要受到过去如何做的影响。 – Pesse 2009-11-23 11:13:43

+1

@Pesse:好吧,旧式外连接* = = *在SQL Server 2008之后已弃用,因此您将拥有完整的样式错误。 – gbn 2009-11-23 19:35:31