为什么SELECT和UPDATE返回不同的记录计数/受影响

时间:2013-11-09 00:06:57

标签: sql sql-update

我编写了一个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查询:

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 个答案:

答案 0 :(得分:3)

一个可能的原因:您有ID个实例,其中存在多条T2条记录

答案 1 :(得分:2)

当您更新一方时,可能会发生一对多连接。在您的情况下,对于某些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'

答案 2 :(得分:0)

尝试使用distinct t1.name而不是select *。由于您要更新T1表中的名称,因此可能会为您提供更新中影响的确切行数。

希望有所帮助,

答案 3 :(得分:0)

我有一个类似的问题,在深入研究数据后,我发现在其中一个表中,JOIN标准中使用的ID不是唯一的(具有重复项)。看起来像在执行SELECT时需要所有匹配,但是在执行UPDATE时只需要删除重复项中的第一个。