在 MySQL 中,可以使用多种方式去除重复数据。以下是几种常见的方法:
1. 使用 DELETE
搭配 ROW_NUMBER()
进行去重
如果 MySQL 版本为 8.0 或以上,支持窗口函数,可以使用 ROW_NUMBER()
来标记重复行,然后删除多余的行。例如:
WITH CTE AS (
SELECT *, ROW_NUMBER() OVER(PARTITION BY 重复字段 ORDER BY id) AS row_num
FROM 表名
)
DELETE FROM 表名
WHERE id IN (
SELECT id FROM CTE WHERE row_num > 1
);
其中,重复字段
是你用来判断重复的字段,id
是唯一标识列。
2. 使用 DELETE JOIN
去重
对于 MySQL 5.7 或更低版本,可以使用自连接的方式来删除重复数据:
DELETE t1 FROM 表名 t1
INNER JOIN 表名 t2
ON t1.重复字段 = t2.重复字段
WHERE t1.id > t2.id;
这种方法通过连接自己,保留 id
最小的行,删除其他重复的行。
3. 创建临时表去重
可以将数据插入到一个临时表中,再把数据插回原表以去重:
CREATE TABLE 临时表 AS
SELECT DISTINCT * FROM 表名;
TRUNCATE TABLE 表名;
INSERT INTO 表名
SELECT * FROM 临时表;
DROP TABLE 临时表;
4. 使用 GROUP BY
搭配 DELETE
去重
如果需要删除除特定条件外的重复记录,也可以用 GROUP BY
来筛选唯一记录:
DELETE FROM 表名
WHERE id NOT IN (
SELECT MIN(id) FROM 表名
GROUP BY 重复字段
);
这种方式通过 MIN(id)
保留每组的第一条记录。
评论区