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

删除重复数据,防止删除所有数据

这是mysql删除重复数据,且保留两条数据的sql,但这条语句含有一个危险的问题,如果子查询到的数据为空,会将表test的数据全部删除。

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 
    ) 

思路

设置一个条件,这条件必须满足子查询有数据。

解决

在删除语句后,增加子查询有数据的结果大于0。

sql代码

 AND (
        SELECT
            count(*) 
        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 
    ) > 0;    

完整代码

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 
    ) 
    AND (
        SELECT
            count(*) 
        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 
    ) > 0;    

相关文章:

  • 在 Ubuntu 下通过 Docker 部署 Mastodon 服务器的详细教程
  • 循环不变量原则——螺旋矩阵
  • 基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)
  • 综合章节:游戏网络化、模组化与深度扩展
  • Mysql深分页的解决方案
  • 再次理解 Spring 中的 IOC、DI、AOP 与多态
  • 【CF】Day14——Codeforces Round(Div2) 924 BC + 926 C + 934 C + 922 C
  • k8s的控制应用Helm
  • 【学习笔记】LLM推理与部署
  • Spring6:10 数据校验-Validation
  • 基于SpringBoot+Vue的在线拍卖管理系统+LW示例参考
  • JavaScript 赋值运算符
  • windows剪切板的内容无法拷贝到虚拟机virtualbox里的Rocky Linux中 --Draft
  • Unity图形学Shader快速回顾
  • C++ Json-Rpc框架-2框架(服务端模块 客户端模块 框架设计)
  • 【Python】【PyQt5】设置事件绑定(例为按钮点击显示提示框)
  • 生物信息复习笔记(2)——测序基本概念
  • xampp安装教程与配置
  • React Router使用方法
  • 单片机开发资源分析实战——以STM32F103ZET6为例子,分析我们的单片机
  • 全军军级以上单位新任纪委书记监委主任培训班结业
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯
  • 科普|治疗腰椎间盘突出症,筋骨平衡理论如何提供新视角?
  • 市值增22倍,巴菲特30年重仓股盘点
  • 解放日报:让算力像“水电煤”赋能千行百业
  • 张炜琳已任三明市委常委、宣传部部长