1

我编写了一个 SELECT 查询来找出我的 UPDATE 查询会影响多少记录。

SELECT 和 UPDATE 返回不同的记录计数。

这是我的 SELECT 查询:

SELECT *
FROM T1
JOIN T2 on T1.ID = T2.ID
WHERE T1.Name IS NULL
  AND T2.Status = 'happy'

这是我的更新查询:

UPDATE T1
SET T1.Name = T2.Name
FROM T1
JOIN T2 on T1.ID = T2.ID
WHERE T1.Name IS NULL
  AND T2.Status = 'happy'

我的 SELECT 返回 19K 记录,而我的 UPDATE 影响 12K 记录。请注意,SELECT 和 UPDATE 的 WHERE 子句完全相同。

是什么导致 SELECT 和 UPDATE 查询之间的记录计数差异?

你能帮我理解这里发生了什么吗?

提前致谢!!

4

4 回答 4

3

一个可能的原因:您有多个实例对应的记录存在ID多个记录T2T1

于 2013-11-09T00:11:51.490 回答
3

当您更新一侧时,这可能发生在一对多连接上。T2在您的情况下,您的某些行看起来不止一行T1,并且服务器将返回该T1行的次数与表中匹配的次数一样多T2

检查这是否符合您的更新计数:

SELECT count(distinct T1.ID)
FROM T1
JOIN T2 on T1.ID = T2.ID
WHERE T1.Name IS NULL
  AND T2.Status = 'happy'
于 2013-11-09T00:15:53.220 回答
0

而不是选择 *,尝试不同的 t1.name。由于您正在更新 T1 表中的名称,这可能会为您提供在更新中影响的确切行数。

希望有帮助,

于 2013-11-09T00:19:24.027 回答
0

我遇到了类似的问题,在深入研究数据后,我发现 JOIN 条件中使用的 ID 在其中一个表中不是唯一的(有重复项)。看起来在执行 SELECT 时它需要所有匹配,但是在执行 UPDATE 时它只从重复项中取出第一个。

于 2018-07-10T12:44:43.403 回答