我有一个带有唯一索引的条形码列的表.为了防止重复,在每个条形码的末尾已为数据加载了额外的字符(-xx),但是一旦我删除后缀,就会有很多重复.这是数据示例:
itemnumber barcode
17912 2-14
18082 2-1
21870 2-10
29219 2-8
然后,我创建了两个临时表,分别是marty和manny,均带有itemnumber和简化后的条形码.因此,两个表都将包含
itemnumber barcode
17912 2
18082 2
21870 2
29219 2
等等
然后,我试图删除Marty表中除第一个条形码为“ 2”以外的所有条目(以及其他所有条形码).我希望然后使用正确的第一项更新原始表,并且用户可以及时在应用程序中自行修复重复项.
因此,这是我的查询,以删除每个条形码的Marty表中除第一个条目以外的所有条目
DELETE FROM marty
WHERE itemnumber NOT IN
(SELECT MIN(itemnumber) FROM manny GROUP BY barcode)
马蒂和曼尼共有130,000行.查询花费了24个小时以上,然后没有正确完成.与服务器的连接崩溃,查询未执行所有更新.
有没有更好的方法来解决这个问题呢?如此多的记录,group by可能也会使事情变慢.
谢谢
解决方法:
另一种变体:此变体无需任何临时表即可删除重复项:
Delete m1
From Marty m1
join Marty m2
on m1.barcode = m2.barcode
and m1.itemnumber > m2.itemnumber