技术文摘
MySQL 怎样删除表中重复行并保留较小(或较大)id 的记录
MySQL 怎样删除表中重复行并保留较小(或较大)id 的记录
在使用 MySQL 数据库时,经常会遇到表中存在重复行的情况,这不仅会占用额外的存储空间,还可能影响数据的准确性和查询性能。此时,我们需要删除这些重复行,同时根据业务需求保留较小或较大 id 的记录。下面就来详细探讨如何实现这一操作。
1. 保留较小 id 的记录
我们创建一个示例表 test_table,其中包含 id、name 和 email 字段。
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
插入一些测试数据,其中包含重复行。
INSERT INTO test_table (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Alice', 'alice@example.com');
要删除重复行并保留较小 id 的记录,可以使用以下方法。
子查询法
DELETE FROM test_table
WHERE id NOT IN (
SELECT min_id
FROM (
SELECT MIN(id) AS min_id
FROM test_table
GROUP BY name, email
) AS subquery
);
在这个查询中,内部子查询首先按 name 和 email 分组,并找出每组中的最小 id。然后,外部查询删除那些 id 不在这些最小 id 集合中的记录。
2. 保留较大 id 的记录
保留较大 id 的记录与保留较小 id 的记录方法类似。
子查询法
DELETE FROM test_table
WHERE id NOT IN (
SELECT max_id
FROM (
SELECT MAX(id) AS max_id
FROM test_table
GROUP BY name, email
) AS subquery
);
这里内部子查询按 name 和 email 分组,并找出每组中的最大 id。外部查询则删除那些 id 不在这些最大 id 集合中的记录。
3. 总结
通过上述方法,我们可以轻松地在 MySQL 中删除表中的重复行,并根据需求保留较小或较大 id 的记录。在实际应用中,需要根据表结构和业务逻辑来选择合适的方法。在执行删除操作前,务必做好数据备份,以防误操作导致数据丢失。掌握这些技巧,能够帮助我们更高效地管理和优化 MySQL 数据库,提升数据质量和系统性能。
TAGS: 删除重复行 MySQL重复行处理 保留较小id记录 保留较大id记录
- 二叉树的遍历与六种二叉树详解
- Python 单例模式的 4 种必知方式
- 解析 Nginx 快速运行的底层原理
- Java 中找对象是否需见家长考核
- Java 反射与动态代理 一看即懂
- 5 款 Python 爬虫库:数据分析不可或缺
- 常用负载均衡方式详解
- 这个开源项目:专治 App 中的 Bug
- 10 个案例助你明晰 React hooks 渲染逻辑
- 微服务的十大优秀实践 入门指南
- 84 岁计算机视觉华人泰斗 Thomas S. Huang 离世 李飞飞等沉痛悼念黄煦涛教授
- Jmeter 参数化的方法有哪些?常见方式汇总!
- 国内热门的 5 款 Java 微服务开源项目
- 疫情期间爆火的直播应用,其背后技术架构你知晓吗?
- 2020 年,医疗 VR 能否复苏?