【发布时间】:2012-10-29 19:54:28
【问题描述】:
我有一个带有唯一索引的条形码列的表。数据已在每个条形码的末尾加载了额外的字符(-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)
marty 和 manny 有 130,000 行。查询花费了 24 小时,然后没有正确完成。与服务器的连接崩溃,查询没有进行所有更新。
有没有更好的方法来解决这个问题,而不是我们的子查询,我认为这会导致延迟?并且 group by 可能也因记录如此之多而放慢了速度。
谢谢
【问题讨论】:
-
itemnumber是唯一的吗?如果是,我认为您的方法最终会奏效,尽管效率低下,因为它会在整个“manny”表中搜索“marty”的每一行。
标签: mysql sql duplicates