2

当我运行这个 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 是相同的,那么受影响的行数怎么会不同呢?两个语句都执行没有错误。我不明白这怎么可能。任何人都可以提供任何见解吗?我是否遗漏了有关更新/加入如何工作的信息?

4

2 回答 2

3

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

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

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

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

于 2012-10-08T16:16:04.043 回答
0

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

您可以通过修改原始查询来验证这一点,如下所示:

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

于 2012-10-08T16:16:49.427 回答