要删除重复数据,可以使用以下步骤:
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
);