如何从具有相同列值的mysql表中删除某一行?

我在MySQL中遇到问题。 我的表有4列,看起来像这样:

id_users id_product quantity date 1 2 1 2013 1 2 1 2013 2 2 1 2013 1 3 1 2013 

id_usersid_product是来自不同表的外键。

我想要的只是删除一行:

 1 2 1 2013 

它出现两次,所以我只是想删除它。

我试过这个查询:

 delete from orders where id_users = 1 and id_product = 2 

但它会删除它们(因为它们是重复的)。 任何提示解决这个问题?

为删除查询添加一个limit

 delete from orders where id_users = 1 and id_product = 2 limit 1 

所有表都应该有一个主键(由单列或多列组成),重复行在关系数据库中是没有意义的。 您可以使用LIMIT来限制删除行的数量:

 DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1 

但是这只是解决了你当前的问题,你应该通过定义主键来解决更大的问题。

您需要指定应该删除的行数。 在你的情况(我假设你只想保留一个),这可以这样做:

 DELETE FROM your_table WHERE id_users=1 AND id_product=2 LIMIT (SELECT COUNT(*)-1 FROM your_table WHERE id_users=1 AND id_product=2) 

devise表格的最佳方法是添加一个临时行作为自动增量并保持为主键。 所以我们可以避免这样的问题。

已经LIMIT删除行的答案。 理想情况下,你应该有你的表中的主键。 但如果没有。

我会给其他方式:

  1. 通过创build唯一索引

我看你的例子中id_users和id_product应该是唯一的。

 ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product) 

这些将删除具有相同数据的重复行。

但是,如果仍然出现错误,即使使用IGNORE子句,请尝试以下操作:

 ALTER TABLE orders ENGINE MyISAM; ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product) ALTER TABLE orders ENGINE InnoDB; 
  1. 再次创build表

如果有多个行具有重复值,那么您也可以重新创build表

 RENAME TABLE `orders` TO `orders2`; CREATE TABLE `orders` SELECT * FROM `orders2` GROUP BY id_users, id_product;