记录一次业务遇到的sql问题
刚开始工作 业务能力比较薄弱 记录一下这几天遇见的一个业务问题
场景
先简单说一下场景,有一批客户(一张表),可以根据这个客户匹配出很多明细数据(另一张表),现在需要删除明细,一个客户可以匹配出很多的明细数据,在删除的时候如果某个客户的明细数据全部删除了,就删除这个客户。
删除时接口参数为明细表的id数组
明细表中字段有 id、customer_id、deleted 这三个字段(其他忽略)。
怎么直接写一个sql的到需要删除的客户id
思路一:
首先根据id查到客户id,在查到还有明细数据的客户id,吧这些id剔除掉就是需要删除的客户id
SELECT customer_id
FROM match_detail
WHERE deleted = 0 AND customer_id IN (
SELECT DISTINCT customer_id
FROM match_detail
WHERE id in (1,2,3,4) )
然后在代码中剔除掉就可以了。
思路二
第一种当然可以 但是能直接查出来需要删除的客户id更好,既然如此直接NOT IN 不就好了
大家可以想一下SQL应该怎么写。
我的想法是直接先查出来所有的客户id,然后查出有明细的客户ID,然后拿全量的客户ID NOT IN 一下不就行了。
这是我写出来下面的SQL
SELECT DISTINCTcustomer_id
FROM`match_detail`
WHERE`id` IN(1) AND `customer_id` NOT IN(SELECT DISTINCT`customer_id`FROM`match_detail`WHERE`id` IN(1) AND `deleted` = 0;
)
大家看一下这个SQL有什么问题吗?
很明细这个SQL有个问题子查询永远不会有值,因为根据id已经删除过了,还要满足未删除,那么这个sql会查处所有的客户id
所以肯定是不满足的。
知道了问题在哪,那么是不是子查询的条件应该是找到所有客户id的明细数据。所以有了以下的SQL
SELECT DISTINCTcustomer_id
FROM`match_detail`
WHERE`id` IN(1) AND `customer_id` NOT IN(SELECT DISTINCT`customer_id`FROM`match_detail`WHERE`customer_id` IN(SELECT DISTINCT`customer_id`FROM`match_detail`WHERE`id` IN(1) ) AND `deleted` = 0);
这个SQL经过验证是符合要求的,然后经过优化,又有了下面的SQL
SELECT DISTINCTt1.customer_id
FROMmatch_detail t1
LEFT JOINmatch_detail t2 ON t1.customer_id = t2.customer_id AND t2.deleted = 0
WHEREt1.id IN (1, 2, 3, 4, 6) AND t2.customer_id IS NULL;
这也算是一次踩坑吧,每一次踩坑都是一次进步,虽然很简单,但是过程中也会遇到考虑不到的点。
有什么问题,或者大家有什么好的解决思路。欢迎指正,一起学习。
相关文章:
记录一次业务遇到的sql问题
刚开始工作 业务能力比较薄弱 记录一下这几天遇见的一个业务问题 场景 先简单说一下场景,有一批客户(一张表),可以根据这个客户匹配出很多明细数据(另一张表),现在需要删除明细,一个…...
代码分支管理
代码分支管理规范 一、分支管理要求 分支管理 • 将代码提交到适当的分支,遵循分支管理策略。 • 随时可以切换到线上稳定版本代码,确保可以快速回滚到稳定版本。 • 同时进行多个版本的开发工作,确保分支清晰,避免混淆。提交记录的可读性 • 提交描述准确,具有可检索性,…...
uniapp sqlite时在无法读取到已准备好数据的db文件中的数据
问题 {“code”:-1404,“message”:“android.database.sqlite.SQLiteException: no such table: user (Sqlite code 1): , while compiling: select * from user, (OS error - 2:No such file or directory),http://ask.dcloud.net.cn/article/282”} at pages/index/index.vu…...
源码编译部署LAMP
编译部署LAMP 配置apache [rootzyq ~]#: wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz --2023-12-11 14:35:57-- https://downloads.apache.org/apr/apr-1.7.4.tar.gz Resolving downloads.apache.org (downloads.apache.org)... 88.99.95.219, 135.181.214.104…...
Echo框架:高性能的Golang Web框架
Echo框架:高性能的Golang Web框架 在Golang的Web开发领域,选择一个适合的框架是构建高性能和可扩展应用程序的关键。Echo是一个备受推崇的Golang Web框架,以其简洁高效和强大功能而广受欢迎。本文将介绍Echo框架的基本特点、使用方式及其优势…...
数据结构--七大排序算法(更新ing)
下面算法编写的均是按照由小到大排序版本 选择排序 思想: 每次遍历待排序元素的最大下标,与待排序元素中最后一个元素交换位置(此时需要设置一个临时变量来存放下标) 时间复杂度--O(n^2) 空间复杂度--O(1) 稳定性--不稳定 代码实…...
202203青少年软件编程(图形化) 等级考试试卷(二级)
第1题:【 单选题】 红框中加入哪个选项积木, 不能阻止气球下落? ( ) A: B: C: D: 【正确答案】: D 【试题解析】 : 第2题:【 单选题】 下图分别是两个角色的初始位置和“黑色圆形”的程序, 点击绿旗后, 角色显示为下列哪个选项?( ) A: B: C: D: 【正确答…...
【智能硬件、大模型、LLM 智能音箱】Emo:基于树莓派 4B DIY 能笑会动的桌面机器人
简介 Emo 是一款个人伴侣机器人,集时尚与创新于一身。他的诞生离不开最新的树莓派 4 技术和先进的设计。他不仅仅是一款机器人,更是一个活生生的存在。与其他机器人不同,他拥有独特的个性和情感,能够俘获你的心灵。 硬件部分 – 树莓派 4B – 微雪 2 英寸 IPS LCD 显示屏…...
rust学习笔记(1-7)
原文 8万字带你入门Rust 1.包管理工具Cargo 新建项目 1)打开 cmd 输入命令查看 cargo 版本 cargo --version2) 使用 cargo new 项目名 在文件夹,按 shift 鼠标右键 ,打开命令行,运行如下命令,即可创建…...
vscode jupyter 如何关闭声音
网上之前搜的zen模式失败 仅仅降低sound失败 #以下是成功方式: 首先确保user和remote的声音都是0: 然后把user和remote的以下设置都设置为off就行了! 具体操作参考 https://stackoverflow.com/questions/54173462/how-to-turn-off-or-on-so…...
plt保存PDF矢量文件中嵌入可编辑字体(可illustrator编辑)
背景: 用默认 plt.savefig() 保存图片,图中文字是以瞄点保存,而不是以文字格式。在编辑矢量图中,无法调整文字大小和字体。 方法: import matplotlib.pyplot as plt import numpy as np# ------输出的图片为illustr…...
Nacos与Eureka的使用与区别
Nacos与Eureka的使用与区别 单体架构:优点缺点 分布式架构需要考虑的问题:微服务企业需求 认识SpringCloud服务的拆分与远程调用微服务调用方式 Eureka提供者和消费者架构搭建Eureka服务注册服务发现 Ribbon负载均衡饥饿加载总结 Nacos注册中心Nacos安装…...
利用express从0到1搭建后端服务
目录 步骤一:安装开发工具步骤二:安装插件步骤三:安装nodejs步骤四:搭建启动入口文件步骤五:启动服务器总结 在日常工作中,有很多重复和繁琐的事务是可以利用软件进行提效的。但每个行业又有自己的特点&…...
如何在Ubuntu中查看编辑lvgl的demo和examples?
如何在Ubuntu中查看编辑lvgl的demo和examples? 如何在 Ubuntu系统中运行查看lvgl 1、拉取代码 在lvgl的github主页面有50多个仓库,找到lv_port_pc_eclipse这个仓库,点进去 拉取仓库代码和子仓库代码 仓库网址:https://github…...
深入了解 大语言模型(LLM)微调方法
引言 众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&…...
C语言之快速排序
目录 一 简介 二 代码实现 快速排序基本原理: C语言实现快速排序的核心函数: 三 时空复杂度 A.时间复杂度 B.空间复杂度 C.总结: 一 简介 快速排序是一种高效的、基于分治策略的比较排序算法,由英国计算机科学家C.A.R. H…...
获取扇区航班数
1、Spark Streaming清洗服务,接收kafka中Topic为“task_ATC”中的数据,保存在MySQL中。 打开SpringBoot项目BigData-Etl-KongGuan 请认真阅读:在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段中应该已经完成了所有Topic的数…...
【已解决】npm install卡主不动的情况
使用 npm install 初始化前端项目时,会出现卡住不动的情况。原因是淘宝镜像源由原来的https://registry.npm.taobao.org 更换为下面这个: https://registry.npmmirror.com 直接在终端执行下面的指令即可: npm config set registry https://re…...
Golang协程详解
一.协程的引入 1.通过案例文章引入并发,协程概念 见:[go学习笔记.第十四章.协程和管道] 1.协程的引入,调度模型,协程资源竞争问题 通过上面文章可以总结出Go并发编程原理: 在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任…...
git:码云仓库提交以及Spring项目创建
git:码云仓库提交 1 前言 码云访问稳定性优于github,首先准备好码云的账户: 官网下载GIT,打开git bash: 查看当前用户的所有GIT仓库,需要查看全局的配置信息,使用如下命令: git …...
Spring Boot项目必备:用Arthas实现MyBatis Mapper热加载的完整配置流程
Spring Boot项目必备:用Arthas实现MyBatis Mapper热加载的完整配置流程 在持续交付的微服务架构中,开发团队经常面临一个共同挑战:每次修改MyBatis的Mapper XML文件后,都需要重启服务才能验证变更效果。这种低效的反馈循环严重拖慢…...
时序数据库选型避坑指南:从写入性能到查询优化的5个关键指标对比(含IoTDB实测数据)
时序数据库选型实战:5个关键指标与IoTDB性能深度评测 当工业互联网平台每秒需要处理百万级传感器数据时,传统数据库的写入瓶颈往往成为系统崩溃的导火索。某汽车制造厂的案例颇具代表性——他们在初期选型时过度关注查询功能,结果系统上线后频…...
.NET 10了,HttpClient还是不能用using吗?我做了一个实验
会突然变成玄学:有的人能跑,有的人会炸,有人说这是一个这是一个“bug”,在某某版本中会修复(其实并没有),有人说这是一个feature,设计就是如此……所以我决定做一个实验,…...
STM32F407硬件COM事件实战:六步换相避坑指南(附CubeMX配置)
STM32F407硬件COM事件六步换相实战:从CubeMX配置到避坑指南 在无刷电机控制领域,六步换相是最基础也最关键的环节之一。传统软件换相方式存在PWM通道更新不同步的痛点,而STM32F407的硬件COM事件功能恰好能完美解决这个问题。本文将带您深入实…...
【微知】Mellanox网卡配置异常?mlxconfig reset全解与实战场景指南
1. Mellanox网卡配置异常?先别慌 遇到Mellanox网卡配置异常时,很多工程师第一反应是重装驱动或者更换硬件。其实在大多数情况下,用对mlxconfig reset这个神器就能快速解决问题。我处理过上百台配备Mellanox网卡的服务器,发现80%的…...
利用快马平台快速构建鸿蒙pc镜像下载验证工具原型
最近在研究鸿蒙系统的PC版本适配工作,发现获取官方镜像是个不小的门槛。官方渠道的下载链接分散在不同页面,版本信息也不够直观,每次下载完还得手动校验文件完整性,整个过程相当繁琐。于是想做个工具来简化这个流程,正…...
2026届毕业生推荐的六大AI辅助论文助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 鉴于“降ai”所表达的意思不清晰确切,猜测围绕这一主题或许是在探究关于AI的热度…...
如何快速掌握Subtitle Edit:新手也能上手的完整实战指南
如何快速掌握Subtitle Edit:新手也能上手的完整实战指南 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 你是不是经常遇到下载的字幕与视频不同步?或者想要为自制视频添加专业…...
从ARXML文件反推软件架构:一个ComM模块的配置实例如何映射到你的C代码
从ARXML到C代码:ComM模块配置的逆向工程实战 当你第一次打开ComM_Cfg_SWCD.arxml文件时,那些层层嵌套的XML标签是否让你感到无从下手?作为AUTOSAR开发中最关键的配置文件之一,ARXML实际上是一张精确的"施工图纸"&#x…...
Java实战:阿里云OSS文件操作工具类封装与优化
1. 阿里云OSS基础认知与Java集成准备 第一次接触阿里云OSS时,我完全被文档里那些专业术语搞懵了。后来才明白,它本质上就是个超级网盘,只不过比我们平时用的网盘更专业、更稳定。想象一下,你有个无限容量的保险箱,可以…...
