• 这些年写过的花式sql - 第1句 删除重复无效的记录


    这些年写过的花式sql - 第一句 删除重复无效的记录

    写好复杂sql可以减少代码量,经过写这些年的后台统计,我学着像写代码一样的设计和尝试sql。现整理如下:
    本来想一次性写完的,不过那写起来和看起来都太累了。还是分解一下吧。
    如果有不对的或者可以优化的地方,欢迎指正。

    第1句

    需求:

    表中有字段 用户名 username,状态 status(1,有效,-1无效)。因为以前的一些疏忽,导致部分username的记录超过1个而且有的状态是1(为1 的最多有一个),有些是-1。现在准备把 同时有1和-1的username记录整理一下,只保留状态为1的那条记录。

    //删除重复无效的username对应的记录
    delete 
    from `child_user` 
    where 
        username in 
            (SELECT username from ( SELECT username,count(*) as num FROM `child_user` group by username having num >1) a)
        and status !=1
    
    
    解析:
    • 分析删除条件:【条件一】status !=1 ,且 【条件二】该username对应的记录不止一条。
      对于条件二,可以分解:
      1. 查询 username 不止一条的记录 ( SELECT username,count(*) as num FROM child_user group by username having num >1)
      2. 把这个结果 起个表别名 a
      3. 提取其中的username列 即为 不止一条记录的username集合
    • 知识点deletegroupin中间结果集作表的转换: (sql)表别名。如果这个 临时结果需要被 “from”,一定要 括起来并加上别名。如果不是被from,目前看来是不要加的。这里加了甚至会出错。
  • 相关阅读:
    Nacos注册中心
    .NET 6 实现滑动验证码(九)、搭建验证码API服务端
    时间复杂度和空间复杂度(以题目的方式来介绍和分析)
    @Scheduled注解详解
    【WINDOWS / DOS 批处理】字符串截取
    网络是怎样连接的--探索协议栈和网卡
    mysql主从复制搭建
    CNN的识别机制
    【图像分割】基于元胞自动机实现图像分割附matlab代码
    基于 CPU 在docker 中部署PaddleOCR
  • 原文地址:https://www.cnblogs.com/xjcyue/p/17598697.html