Dan*_*ani 152 mysql delete-row
我的MySQL查询有问题.我的表有4列,看起来像这样:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
Run Code Online (Sandbox Code Playgroud)
id_users
并且id_product
是来自不同表的外键.
我想要的是只删除一行:
1 2 1 2013
Run Code Online (Sandbox Code Playgroud)
哪个出现两次,所以我只想删除它.
我试过这个查询:
delete from orders where id_users = 1 and id_product = 2
Run Code Online (Sandbox Code Playgroud)
但它会删除它们(因为它们是重复的).解决这个问题的任何提示?
jue*_*n d 201
添加limit
到删除查询
delete from orders
where id_users = 1 and id_product = 2
limit 1
Run Code Online (Sandbox Code Playgroud)
dne*_*net 62
所有表都应该有一个主键(由一列或多列组成),重复行在关系数据库中没有意义.您可以使用以下方法限制删除行的数量LIMIT
:
DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但这只是解决了您当前的问题,您肯定应该通过定义主键来处理更大的问题.
Rob*_*Rob 20
您需要指定应删除的行数.在你的情况下(我假设你只想保留一个)这可以这样做:
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)
Run Code Online (Sandbox Code Playgroud)
删除行已有答案LIMIT
.理想情况下,您应该在表中使用主键.但如果没有.
我会给出其他方式:
我看到id_users和id_product在你的例子中应该是唯一的.
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
Run Code Online (Sandbox Code Playgroud)
这些将删除具有相同数据的重复行.
但是,如果仍然出现错误,即使您使用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;
Run Code Online (Sandbox Code Playgroud)
如果有多个行具有重复值,则还可以重新创建表
RENAME TABLE `orders` TO `orders2`;
CREATE TABLE `orders`
SELECT * FROM `orders2` GROUP BY id_users, id_product;
Run Code Online (Sandbox Code Playgroud)