我试图删除数据库中的重复记录。唯一的区别是主键是唯一标识符。我有大约 1500 个条目被欺骗,所以我总共查看了大约 3000 个条目。所以我切掉了大约 60 个条目(基于 receivedOn 日期)并执行我的代码将它们减少到 30 个,然后 OH CRAP,30 个消失了!这是我试过的代码:

DELETE dupes 
FROM [emailTable] dupes, [emailTable] fullTable 
WHERE (dupes.ReceivedOn > '2009-08-18 23:59:59.999' AND dupes.ReceivedOn < '2009-08-20 00:00:00.000') 
      AND (dupes.emlPath = fullTable.emlPath) 
      AND NOT (dupes.GUID = fullTable.GUID) 

我的目标是删除重复项。我不在乎哪一个...但我需要两个条目之一才能保留在服务器上...任何人都可以阐明我做错了什么吗?

请您参考如下方法:

您可以在没有第二张表的情况下执行此操作。像这样:

SELECT * FROM emailTable 
WHERE EXISTS ( 
    SELECT * FROM emailTable AS t2 
    WHERE t2.emlPath = emailTable.emlPath AND 
    t2.GUID > emailTable.GUID) 

这将向您显示哪些记录将被删除。如果没问题,请将其更改为:

DELETE FROM emailTable 
WHERE EXISTS ( 
    SELECT * FROM emailTable AS t2 
    WHERE t2.emlPath = emailTable.emlPath AND 
    t2.GUID > emailTable.GUID) 

t2.GUID > emailTable.GUID 将确保具有该 emlPath 的一条记录将保留在表中。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!