SQL 处理重复记录:查询、去重与删除实战指南

Cora
Cora
发布时间:2026-10-13| 6人浏览过
原创

在数据库管理中,数据冗余和重复记录是常见痛点。本文将总结 SQL 中处理重复记录的核心技巧,涵盖从简单的结果去重到复杂的基于条件的记录删除,通过具体代码示例演示如何利用 Distinct、Group By 及子查询等机制,安全有效地清理 TestTable 中的重复数据。

查找重复记录

在处理数据之前,首先需要通过不同的查询方式定位重复的情况。根据需求不同,可以分为三种常见场景:

第1步:简单结果去重

目的:如果仅需在查询展示时隐藏重复行,不修改底层数据,可使用 DISTINCT 关键字。

操作:在 SELECT 语句中加入 DISTINCT。

select distinct * from TestTable

完成状态:查询返回的行中,所有字段的组合都是唯一的。

第2步:查询重复记录及其数量

目的:找出哪些数据是重复的,并统计每组重复数据的出现次数。

操作:使用 GROUP BY 对关键字段分组,配合 COUNT(*) 计数,并通过 HAVING 过滤出数量大于1的组。

select UserID,UserName,count(*) as '记录数'
from TestTable
Group by UserID,UserName 
having count(*)>1

完成状态:列表仅显示存在重复情况的 UserID 和 UserName,以及它们各自的重复总数。

第3步:按条件保留单条重复记录

目的:当主键(如 UserID)不同,但业务字段(如姓名、性别、地址)完全一致时,可能需要提取其中一条作为代表。

操作:通过子查询找到每组重复记录中最大的 UserID,然后在外层查询中匹配这些 ID。

select * from TestTable where UserID in
(select max(UserID) as UserID from TestTable group by UserName,Sex,Place)

完成状态:结果集包含每组重复数据中具有最大 UserID 的那一行记录。

删除重复记录

确定重复模式后,可根据数据规模和业务需求选择清空重建或精确删除的策略。

第4步:全量表级去重(临时表法)

目的:快速清理整个表中所有的重复行,适用于对性能要求不高且允许短暂锁表的场景。

风险提示:此操作会彻底替换原表数据,执行前务必确认备份。

操作顺序:

  1. 创建临时表并导入去重后的数据:
    select distinct * into #Temp from TestTable
  2. 删除原始表数据:
    drop table TestTable
  3. 将临时表数据重新插入:
    select * into TestTable from #Temp
  4. 清理临时表:
    drop table #Temp

完成状态:TestTable 中不再存在任何字段组合完全相同的重复行。

第5步:精确删除非保留记录

目的:在保留每组重复记录中某一条(通常是 ID 最大的一条)的情况下,删除其余重复项。

操作:利用 NOT IN 结合子查询,找出那些不在“各组最大 ID”集合中的记录进行删除。

delete TestTable where UserID not in
(select max(UserID) as UserID from TestTable group by UserName,Sex,Place)

完成状态:对于每一组由 UserName、Sex、Place 定义的重复数据,仅保留了 UserID 最大的那一条,其余全部被移除。

以上就是 SQL 处理重复记录的详细内容,更多关于数据库数据清洗优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。