Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql 删除重复数据

作者:翻成云恨雨愁   发布日期:2025-05-29   浏览:81

-- 删除重复数据,保留一条记录

-- 假设我们有一个名为 'users' 的表,其中 'email' 列存在重复数据,我们希望删除重复的记录,只保留一条。

-- 方法一:使用临时表
CREATE TEMPORARY TABLE temp_users AS
SELECT DISTINCT * FROM users;

TRUNCATE TABLE users;

INSERT INTO users
SELECT * FROM temp_users;

DROP TEMPORARY TABLE temp_users;

-- 解释:
-- 1. 创建一个临时表 'temp_users',存储 'users' 表中所有不重复的记录。
-- 2. 清空原始 'users' 表。
-- 3. 将临时表中的数据重新插入到 'users' 表中。
-- 4. 删除临时表。

-- 方法二:使用 DELETE 和 GROUP BY
DELETE t1 FROM users t1
INNER JOIN users t2
WHERE t1.id > t2.id AND t1.email = t2.email;

-- 解释:
-- 1. 使用自连接的方式,将 'users' 表与自身连接。
-- 2. 删除那些 'id' 较大的重复记录,保留 'id' 较小的记录。
-- 3. 这里的条件是 't1.id > t2.id' 和 't1.email = t2.email',确保只删除重复的记录,并保留一条。

-- 方法三:使用 ROW_NUMBER() (适用于 MySQL 8.0+)
WITH CTE AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
    FROM users
)
DELETE FROM users
WHERE id IN (SELECT id FROM CTE WHERE rn > 1);

-- 解释:
-- 1. 使用 CTE(公用表表达式)为每个 'email' 分组,并按 'id' 排序。
-- 2. 使用 ROW_NUMBER() 函数为每个分组分配行号。
-- 3. 删除行号大于 1 的记录,即删除重复的记录,只保留每组的第一条记录。

上一篇:mysql 序号

下一篇:mysql text 大小

大家都在看

mysqlavg函数保留小数

mysql经纬度距离计算

存储过程mysql

mysql with语句

mysql时间加减

brew 启动mysql

unsigned在mysql中是什么意思

mysql 插入更新

python mysql update

mysql 查看权限

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站