微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DELETE删除的行少于必须删除的行

如何解决DELETE删除的行少于必须删除的行

我有一项任务是根据两个表之间的条件删除一个表中的行(由于没有PRIMARY或UNIQUE KEY,所以我会在多列上进行联接:

DELETE rf 
FROM #tempTable rf 
LEFT JOIN #tempTableInc rfi 
    ON rf.ID = rfi.ID
    AND rf.Code = rfi.Code 
    AND rf.Type = rfi.Type
    AND rf.Year = rfi.Year
WHERE rfi.Value != rf.Value

如果我只写这段代码

SELECTrf.*,rfi.Value rfi
FROM #tempTable rf 
    LEFT JOIN #tempTableInc rfi 
        ON rf.ID = rfi.ID
        AND rf.Code = rfi.Code 
        AND rf.Type = rfi.Type
        AND rf.Year = rfi.Year
    WHERE rfi.Value != rf.Value

例如,我收到30条记录。当我在DELETE语句中写入它时,我仅删除26条记录。这种差异的原因可能是什么?

解决方法

差异的原因是JOIN可能为rf中的给定行生成多行。即使SELECT返回这些行,也只会删除其中一行。

请注意,此逻辑不需要LEFT JOIN,因为WHERE子句要求存在匹配项,从而将外部联接转换为内部联接。

您可以使用EXISTS获得更准确的计数:

SELECT rf.*
FROM #tempTable rf 
WHERE EXISTS (SELECT 1
              FROM #tempTableInc rfi 
              WHERE rf.ID = rfi.ID AND
                    rf.Code = rfi.Code AND
                    rf.Type = rfi.Type AND
                    rf.Year = rfi.Year AND
                    rfi.Value <> rf.Value
             );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。