更新连接不会更新与equivelant select相同的行数

时间:2012-10-08 16:13:15

标签: sql tsql join sql-update

当我运行这个SELECT语句时,我会收到642行......

SELECT *
FROM _DevLoadIn a
JOIN ArticleCompanyList b ON b.Company = a.Name

当我运行此UPDATE语句时,只更新了630行...

UPDATE b
SET b.BGCompanyId = a.RelatedId
FROM _DevLoadIn a
JOIN ArticleCompanyList b ON b.Company = a.Name

JOIN是相同的,那么受影响的行数如何不同?两个语句都可以正确执行。我不明白这是怎么可能的。谁能提供任何见解?我错过了有关更新/加入如何工作的内容吗?

2 个答案:

答案 0 :(得分:3)

最好的猜测是,对于B的每个值,A中有更多匹配。因此select语句返回A的连接重复项 - 但update仅更新行一次。

换句话说,您选择的附加值是B(不是A)的表示。

----更新后的问题编辑-----

您确定要更新正确的值吗?确保正确的表(A或B)位于update语句的左侧。您似乎已经编辑了问题并切换了最初发布的内容。然而,理论仍然是相同的。

答案 1 :(得分:0)

如果b.BGCompanyId已经等于a.RelatedId,它将不会显示为已更新。

您可以通过修改原始查询来验证这一点:

SELECT *
FROM _DevLoadIn a
JOIN ArticleCompanyList b ON b.Company = a.Name
WHERE b.BGCompanyID != a.RelatedId