我正在努力解决我认为简单的问题。 我需要删除在发布一些错误代码后在表中创建的一些重复行。
我尝试的查询如下:
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);
选择肯定会选择我想要删除的正确ID,但是我收到了错误
ERROR 1093(HY000):您无法在FROM子句中为更新指定目标表'buzz'
我已经尝试过所有我能想到的不同的东西,所以现在我想我只是以错误的方式接近这个。
有人可以帮忙吗?
答案 0 :(得分:0)
在MySQL中解决这个问题还有一个小技巧。它适用于列表中的MySQL 5.6,只需用另一个子选择包装子选项:
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);
您也可以参考This。
答案 1 :(得分:0)
试试这个:
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);
答案 2 :(得分:0)
你真的不需要子查询。这应该有效:
DELETE b1
FROM buzz b1,
buzz b2
WHERE b1.id > b2.id
AND b1.message = b2.message;
这会删除重复项,但会将原始文件保留在表格中。