Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于从表中选择的mysql从表中删除_Mysql - Fatal编程技术网

基于从表中选择的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。