当前位置: 首页 > news >正文

MySQL 处理重复数据:保留一条与两条的实现方案

在数据库管理中,处理重复数据是一项常见的任务。本文将详细介绍如何在 MySQL 数据库里,针对 test 表中 fd 和 fe 字段存在的重复数据进行处理,分别实现保留一条和两条数据的操作。

表结构与需求概述

假设 test 表包含三个字段:id(作为主键)、fd 和 fe。其中,fd 和 fe 字段存在重复值,我们的目标是分别保留每组重复数据中的一条和两条记录,同时删除其余的重复数据。

保留每组重复数据中的一条记录

思路

我们可以使用子查询结合 MIN(id) 函数,按 fd 和 fe 字段分组,找出每组中 id 最小的记录,然后删除 id 不在这些最小 id 范围内的记录。

SQL 代码

DELETE 
FROM
    test 
WHERE
    id NOT IN (
    SELECT
        id 
    FROM
    ( SELECT min( id ) id FROM `test` GROUP BY fd, fe HAVING count( id ) > 1 ORDER BY id ) a 
    );

代码解释

  1. 子查询SELECT min( id ) id FROM test GROUP BY fd, fe HAVING count( id ) > 1 按 fd 和 fe 分组,找出每组中 id 最小的记录,并且只考虑重复记录数大于 1 的组。
  2. 外层查询DELETE FROM test WHERE id NOT IN (...) 删除 id 不在子查询结果中的记录,从而保留每组中的一条记录。

 

保留每组重复数据中的两条记录

思路

为了保留每组中的两条记录,我们可以分别找出每组中 id 最小和最大的记录,然后使用 UNION 操作符将它们合并,最后删除 id 不在合并结果中的记录。

SQL 代码

DELETE 
FROM
    test 
WHERE
    id NOT IN (
    SELECT
        id 
    FROM
    ( SELECT
        id 
    FROM
        test 
    WHERE
        id IN (
        SELECT
            id 
        FROM
        ( SELECT min( id ) id FROM `test` GROUP BY fd, fe HAVING count( id ) > 2 ORDER BY id ) a 
        UNION 
        SELECT
            id 
        FROM
        ( SELECT max( id ) id FROM `test` GROUP BY fd, fe HAVING count( id ) > 2 ORDER BY id ) b 
        )) c
    );

代码解释

  1. 子查询 aSELECT min( id ) id FROM test GROUP BY fd, fe HAVING count( id ) > 2 找出每组中 id 最小的记录,只考虑重复记录数大于 2 的组。
  2. 子查询 bSELECT max( id ) id FROM test GROUP BY fd, fe HAVING count( id ) > 2 找出每组中 id 最大的记录,同样只考虑重复记录数大于 2 的组。
  3. UNION 操作:将子查询 a 和 b 的结果合并,得到每组中 id 最小和最大的记录。
  4. 外层查询DELETE FROM test WHERE id NOT IN (...) 删除 id 不在合并结果中的记录,从而保留每组中的两条记录。
http://www.dtcms.com/a/86863.html

相关文章:

  • 鸿蒙harmonyOS:笔记 正则表达式
  • Cloudfare内网穿透配置
  • Java设计模式之中介者模式
  • YOLO11改进|全网首发|YOLO11中引入轻量级坐标注意力LCA
  • (UI自动化测试web端)第二篇:元素定位的方法_class定位
  • OpenCV平滑处理:图像去噪与模糊技术详解
  • LeetCode(704):二分查找
  • 【大模型科普】大模型:人工智能的前沿(一文读懂大模型)
  • Canal同步延迟和数据丢失优化方案
  • IBM ECM结合 第三方AI API 来实现文档分析和 RAG
  • 如何从后端实现页面跳转?
  • MLIR中Dialect的抽象层级 简介
  • 算法训练营第二十二天 | 回溯算法(四)
  • page.json和manifest.json
  • 耗时sql分析
  • 通义灵码2.0 AI 程序员体验:优化与问题解决的全过程
  • 练习用Jupyter使用selenium【疑问未解决版】
  • 关于TVS管漏电流的问题?
  • 计算机二级:函数基础题
  • WMS仓储管理系统架构介绍
  • 进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)
  • 基于深度学习的图像分割项目实践:从理论到应用
  • VBA-Excel
  • 自动化机器学习(TPOT优化临床试验数据)
  • springCloud集成tdengine(原生和mapper方式) 其二 原生篇
  • 阿里云对象存储教程
  • NGINX中的反向代理实践
  • 【C++】--- 类和对象(中)之日期类的实现
  • 遇见东方微笑·畅游如意甘肃——“天水文化旅游嘉年华”2025年春季文旅宣传推广活动侧记
  • RTX4090架构解析与性能实测