【发布时间】:2010-05-18 22:28:14
【问题描述】:
我在 MYSQL 数据库中有一个表('sales'),它理应强制执行唯一约束以防止重复。首先删除欺骗并设置约束被证明有点棘手。
表结构(简化):
- 'id (unique, autoinc)'
- product_id
目标是强制 product_id 的唯一性。我要应用的重复数据删除策略是删除除最近创建的所有重复记录之外的所有重复记录,例如:最高 id。
或者换句话说,我想只删除重复记录,不包括以下查询匹配的 id,同时还保留现有的非重复记录:
select id
from sales s
inner join (select product_id,
max(id) as maxId
from sales
group by product_id
having count(product_id) > 1) groupedByProdId on s.product_id
and s.id = groupedByProdId.maxId
我在两个方面都在努力解决这个问题 - 编写查询以选择要删除的正确记录,然后是 MYSQL 中的约束,其中 DELETE 的子选择 FROM 子句不能引用要从中删除数据的同一个表。
我查看了this 的答案,它似乎处理了这个主题,但似乎特定于 sql-server,尽管我不排除复制另一个问题的可能性。
【问题讨论】: