我编写了一个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查询之间的记录数差异?
你能帮我理解这里发生了什么吗?
提前致谢!!
答案 0 :(得分:3)
一个可能的原因:您有ID
个实例,其中存在多条T2
条记录1}}记录
答案 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时只需要删除重复项中的第一个。