随笔 - 11  文章 - 0  评论 - 21  阅读 - 7532 

这些年写过的花式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,目前看来是不要加的。这里加了甚至会出错。
posted on   逆风向阳  阅读(1054)  评论(10编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示