Mysql删除某几个重复条件的数据,保留一条

294 阅读1分钟

要删除重复数据,可以使用以下步骤:

1.查找重复数据

使用 GROUP BY 和 HAVING 子句,按照重复的列进行分组,并且只选择出现次数大于1的组。

SELECT column1, column2, ..., COUNT(*) as count
FROM your_table
GROUP BY column1, column2, ...
HAVING COUNT(*) > 1;

2.删除重复数据:

对于每个重复组,保留第一个(id最小)记录,将其余记录删除。

DELETE FROM your_table
WHERE (column1, column2, ...) IN (
   SELECT column1, column2, ...
   FROM your_table
   GROUP BY column1, column2, ...
   HAVING COUNT(*) > 1
) AND id NOT IN (
   SELECT MIN(id)
   FROM your_table
   GROUP BY column1, column2, ...
   HAVING COUNT(*) > 1
);

3.注意:

上述删除SQL出现如下报错:

 You can‘t specify target table ‘表名‘ for update in FROM clause

意思是说不能依据某字段值做判断再来更新某字段的值,修改sql:

DELETE FROM your_table
WHERE (column1, column2, ...) IN (
   SELECT t1.column1, t2.column2, ... FROM (
       SELECT column1, column2, ...
       FROM your_table
       GROUP BY column1, column2, ...
       HAVING COUNT(*) > 1
   ) AS t1
) AND id NOT IN (
       SELECT t2.min_id FROM(
       SELECT MIN(id)
       FROM your_table
       GROUP BY column1, column2, ...
       HAVING COUNT(*) > 1
   ) AS t2
);