侧边栏壁纸
博主头像
峰峰火火博主等级

一条咸鱼罢了

  • 累计撰写 124 篇文章
  • 累计创建 90 个标签
  • 累计收到 59 条评论

目 录CONTENT

文章目录

MySQL去除重复数据

峰峰火火
2024-11-01 / 0 评论 / 0 点赞 / 35 阅读 / 388 字 / 正在检测是否收录...
温馨提示:
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在 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) 保留每组的第一条记录。

0

评论区