我继承了以下代码(仅限第一个块),但不了解
之间的区别UPDATE Contact2
SET Contact2.gbs_contactid = Contact1.gbs_contactId
FROM gbs_sourcecontact Contact2
INNER JOIN gbs_sourcecontact Contact1
ON Contact1.gbs_sourcecontactid = '90BFC45B-8C75-4054-89D0-5400B225108C'
WHERE Contact2.gbs_sourcecontactid =' E83C4FF3-4298-4CF3-8718-6CF987CE5803'
和
UPDATE Contact2
SET Contact2.gbs_contactid = Contact1.gbs_contactId
FROM gbs_sourcecontact Contact2
INNER JOIN gbs_sourcecontact Contact1
ON Contact1.gbs_sourcecontactid = '90BFC45B-8C75-4054-89D0-5400B225108C'
AND Contact2.gbs_sourcecontactid =' E83C4FF3-4298-4CF3-8718-6CF987CE5803'
和
UPDATE Contact2
SET Contact2.gbs_contactid = Contact1.gbs_contactId
FROM gbs_sourcecontact Contact2
INNER JOIN gbs_sourcecontact Contact1
ON Contact2.gbs_sourcecontactid =' E83C4FF3-4298-4CF3-8718-6CF987CE5803'
WHERE Contact1.gbs_sourcecontactid = '90BFC45B-8C75-4054-89D0-5400B225108C'
我理解内连接的概念;但是,在这个特定情况下,我不理解切换ON/WHERE
子句时发生的行为。
如何切换ON / WHERE子句会影响结果?
答案 0 :(得分:2)
在on
和where
子句之间切换条件不会影响内部联接的结果(请参阅下面的警告)。这些" join" s令人困惑,因为表之间没有真正的联系。你只是从表中选择(大概)单行并匹配它们。
我倾向于以第二种方式编写连接,on
子句中包含两个条件。 on
和where
条款中的混合条件会导致混淆 - 以及诸如你的问题。
警告:如果Contact1
中存在多个匹配项,则会为更新选择其中一个值(来自任意匹配行的值)。在on
子句与where
子句中放置条件可能不会影响执行计划。但是,你永远不会知道。在这种情况下,可能会有小的差异导致不同的更新。