mysql基于select from table从表中删除

时间:2014-10-27 10:47:23

标签: 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);

选择肯定会选择我想要删除的正确ID,但是我收到了错误

ERROR 1093(HY000):您无法在FROM子句中为更新指定目标表'buzz'

我已经尝试过所有我能想到的不同的东西,所以现在我想我只是以错误的方式接近这个。

有人可以帮忙吗?

3 个答案:

答案 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;

这会删除重复项,但会将原始文件保留在表格中。