如何删除MySQL表中的重复行?

时间:2019-05-26 12:10:16

标签: mysql sql

我正在使用以下查询,该查询是我从另一个stackoverflow问题中看到的,但出现错误。

delete from mytable
 where myid not in (
    select max(myid)
      from mytable
group by myid2)

错误:

  

#1093-表'mytable'被指定两次,既作为'DELETE'的目标,又作为数据的单独来源

编辑2:

我也尝试过以下查询:

delete from mytable
 where myid in (
    SELECT
    myid, COUNT(*)
FROM
    mytable
GROUP BY
    myid2
HAVING 
    COUNT(*) > 1)

并收到此错误:

  

#1241-操作数应包含1列

1 个答案:

答案 0 :(得分:1)

在MySQL中,您需要为此使用JOIN。我认为您的意思是这样的:

delete t
   from mytable t left join
        (select max(myid) as myid
         from mytable
         group by myid2
        ) tt
        on t.myid = tt.myid
   where tt.myid is null;

?是您真正要分组的依据。您的版本不会删除任何内容,因为group bymax()使用同一列。