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

时间:2014-03-08 08:38:49

标签: mysql duplicates relational-database delete-row

这是我的桌子的样子 =======================================
|| ID | collection_id | PRODUCT_ID |价格||
=======================================
|| 1 | 1 | 1 | 2.50 ||
|| 2 | 1 | 1 | 2.60 ||
|| 3 | 1 | 1 | 2.40 ||
|| 4 | 2 | 1 | 2.50 ||
=======================================

这是我想要实现的大致轮廓; 使用一些伪代码。

我想要做的是 DELETE FROM 价格 WHERE (集合 _ id&& product _ id重复) AND WHERE (id<最高重复行)

所以我想用简单的英语做的是删除行,其中id等于1& 2但保持id等于3的行,因为这是最新的。

1 个答案:

答案 0 :(得分:2)

一个简单的DELETE JOIN应该这样做;删除至少存在一行且匹配collection_idproduct_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

An SQLfiddle to test with,请记住在从互联网上的随机用户进行更新或删除之前,始终备份您的数据。