我试图删除数据库中的重复记录。唯一的区别是主键是唯一标识符。我有大约 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
的一条记录将保留在表中。