删除多个索引相同的MySQL行,但保留最新索引

删除多个索引相同的MySQL行,但保留最新索引,mysql,duplicates,relational-database,delete-row,Mysql,Duplicates,Relational Database,Delete Row,这是我的桌子的样子 ======================================================= || 身份证件 | 集合id | 产品标识 | 价格 || ======================================================= || 1. |   1.    |   1.   | 2.50 || || 2. |   1.    |   1.   | 2.60 || || 3. |   1.    |   1.   | 2

这是我的桌子的样子
=======================================================
|| 身份证件 | 集合id | 产品标识 | 价格 ||
=======================================================
|| 1. |   1.    |   1.   | 2.50 ||
|| 2. |   1.    |   1.   | 2.60 ||
|| 3. |   1.    |   1.   | 2.40 ||
|| 4. |   2.    |   1.   | 2.50 ||
=======================================================

这里是我想要达到的目标的大致轮廓使用一些伪代码。

我想做的是价格中删除(收藏id和产品id重复)(id<最高重复行)


因此,我想用简单的英语删除id等于1和2的行,但保留id等于3的行,因为这是最新的。

一个简单的
删除连接可以做到这一点;删除至少有一行具有匹配的
collection\u id
product\u id
且值大于
id
的所有行

DELETE p1
FROM prices p1
JOIN prices p2
  ON p1.collection_id = p2.collection_id
 AND p1.product_id = p2.product_id
 AND p1.id < p2.id
删除p1
从价格p1
加入价格p2
在p1.collection\u id=p2.collection\u id上
p1.product_id=p2.product_id
p1.id

,并记住在对Internet上的随机用户执行更新或删除操作之前,请始终备份您的数据。

谢谢您的提示,但在我理解之前,我不会执行此操作。我能从小提琴上看到它的工作原理,但我看不出它是如何工作的。p1和p2来自哪里?如果有50个值,会发生什么?这是一个伪表吗?好的,我用10行测试了这个表,它工作了,你能解释一下它在做什么吗?@gcoulby基本上,它是一个常规的
连接
。查询从表
prices
中选择两行,并将它们称为
p1
p2
。如果条件为真(即它们的行匹配,p1的id较低),我们将p1从表中删除。然后,它基本上会对表中的每一行组合重复,因此最终结果是,所有具有更大id的匹配行的行都已被删除。啊,现在这很有意义。我没有在这个项目中使用它,但这对于第二个项目来说非常方便。在这个项目中,我输入了代码,在条目中检测到重复项并自动删除旧项。