基于从表中选择的mysql从表中删除
我正在努力解决我认为简单的问题。 我需要删除在发布一些错误代码后在表中创建的一些重复行 我尝试过的查询如下:基于从表中选择的mysql从表中删除,mysql,Mysql,我正在努力解决我认为简单的问题。 我需要删除在发布一些错误代码后在表中创建的一些重复行 我尝试过的查询如下: delete from buzz where id IN (select distinct b1.id from buzz b1, buzz b2 where b1.id != b2.id and b1.message = b2.message); select确实选择了我想要删除的正确ID,但是我得到了错误 错误1093 HY000:无法在FROM子句中为更新指定目标表“buzz”
delete from buzz where id IN (select distinct b1.id from buzz b1, buzz b2 where b1.id != b2.id and b1.message = b2.message);
select确实选择了我想要删除的正确ID,但是我得到了错误
错误1093 HY000:无法在FROM子句中为更新指定目标表“buzz”
我已经尝试了我能想到的每一件不同的事情,所以现在我想我只是用错误的方式来处理这个问题
有人能帮忙吗?MySQL中有一个小技巧可以解决这个问题。它在MySQL 5.6 at list上工作,只需将子选择与另一个子选择包装在一起:
delete from buzz where id IN (select * from
(select distinct b1.id from buzz b1, buzz b2 where b1.id != b2.id
and b1.message = b2.message) Tab_alias);
您也可以参考。试试这个:
delete from buzz where id IN (
select id from (
select distinct b1.id
from buzz b1, buzz b2
where b1.id != b2.id
and b1.message = b2.message)
as tempTable);
你真的不需要为这个子查询。这应该起作用:
DELETE b1
FROM buzz b1,
buzz b2
WHERE b1.id > b2.id
AND b1.message = b2.message;
这将删除重复项,但将原始项保留在表中。所有这些解决方案都很好,但这非常适合我们的需要,因为保留原始项很有用。不过,我应该补充一点,您需要使用不同的b1,否则会得到大量重复ID。