巧用SQL语句中的OR查询完成业务新需求-2022新项目
一、业务场景
目前参与开发的项目,之前的一个已上线的版本中有一类查询是根据两张表进行LEFT JOIN查询用来取数据,
主表中有一个字段field用来区分不同的数据类型比如说A/B/C。前面的版本中只查询A/B两种类型的数据,并且
查询条件都是一样的,有多个相同的查询条件。项目已经正常上线,没有发现其他的问题。
二、需求分析
最新的需求中,查询的时候会添加类型C的数据,并且查询条件还不一样,这种方式该如何处理呢?有一点
是确定的,接口只有一个,最开始的时候只查询两种类型的数据,由于条件一样查询起来也很方便。可是现在新
需求需要改动,需要查询三种类型的数据,这个就让我有些犯难。不能新增接口,比如根据不同的参数类型查
询不同的数据,本身就只有一个接口,这个接口需要同时查询A/B/C三种类型的数据,并且查询条件还不一样。
可是在查询数据的时候如何进行区分呢?如果是总数查询的话,可以在service中查询两次,根据不同的类型来进行
查询。可是分页展示的情况则不好处理,需要自己手动进行分页查询,到底该怎么解决呢?
三、解决方案
自己经过认真的思考,找到一种解决方案,SQL查询语句中有一种查询方式是union查询,可以查询不同条件
的数据,然后将这些数据组合在一起进行返回。union 查询表示去除查询结果中的重复数据,union all 表示不去除
查询结果中的重复数据。自己随便使用哪一种方式都行,因为自己在查询的时候,根据不会存在重复数据。用Union
查询时不同部分就可以使用不同的条件进行查询,考虑到这里自己还是很开心的,总算是找到一种解决方案。
由于项目中有的查询语句是不能使用的,需要考虑到查询语句的复杂度,也需要考虑查询的效率问题。因此自己
立马去询问负责人,是否可以采用这种方案。负责人在询问清楚情况后,否定了这种方案。他建议我采纳另外一种
方案,这种方案就是使用查询关键字OR来进行查询。一开始的时候,自己没有考虑到这种方案,听他这么一说,
自己才明白过来。这种方案查询语句会简洁得多,查询方式为 where 共同条件一 AND 共同条件二
AND ((查询类型 IN (A,B) AND AB类型独有的条件) OR (查询类型 = C AND C类型独有的条件))
改好代码后,自己立马进行测试,测试结果符合要求。
这种查询方式比使用union查询会简单会多,而且也更加的容易理解。一个简单的OR查询就解决了变化的
新需求,让自己学习到新东西,还有这种解决问题的思路。如果有其他更好建议的小伙伴,欢迎留言讨论。
巧用SQL语句中的OR查询完成业务新需求-2022新项目的更多相关文章
- Mybatis中sql语句中的in查询,一定要判断null的情况
不严谨的写法,可能会报错:in (),这种情况不符合mysql的语法. select from loanwhere LOAN_ID in <foreach item="item&quo ...
- sql语句中【模糊查询like的使用】
1.like的使用: 在数据库软件中进行测试时,书写的格式是: 比如: select * from fdx.dbo.[User] where 1=1 and name like '%'+'a'+'%' ...
- 分享一篇:sql语句中使用子查询,可能会引起查询的性能问题,查询时间会变长
前段时间,做自动化适配的时候,查找需要的数据的时候,使用到了dblink,跨数据库实例进行访问,整段sql拼接再加上dblink,在plsql查询的时候,性能还不是很长时间,最多2分钟可以查到,前期调 ...
- SQL语句中的日期查询
我们先创建一个表: CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NULL COMMEN ...
- Mybatis中sql语句中的in查询,判断null和size为0的情况
不严谨的写法,可能会报错:in (),这种情况不符合SQL的语法,导致程序报错. 如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据! 所以一个比 ...
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...
- hibernate中使用sql语句进行表链接查询,对结果集的遍历方法
今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_ ...
- Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束”
Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束 Sql 中的连接查询:就是为了避免笛卡尔积,因为涉及到多表查询的化,不使用连接查询,会先将多个互相乘,求出笛卡尔积,然后在在里面查询符合的 ...
- SQL Server参数化SQL语句中的like和in查询的语法(C#)
sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...
- SQL语句中的单引号处理以及模糊查询
为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...
随机推荐
- 【二】MADDPG多智能体算法实现(parl)【追逐游戏复现】
相关文章: [一]MADDPG-单智能体|多智能体总结(理论.算法) [二]MADDPG多智能体深度强化学习算法算法实现(parl)--[追逐游戏复现] 程序链接:直接fork:MADDPG多智能体深 ...
- 小样本学习在文心ERNIE3.0多分类任务应用--提示学习
小样本学习在文心ERNIE3.0多分类任务应用(提示学习) 项目链接: https://aistudio.baidu.com/aistudio/projectdetail/4438610?contri ...
- 【4】jupyter notebook快速入门、以及常用快捷键使用
相关文章: [1]Anaconda安装超简洁教程,瞬间学会! [2]Anaconda下:ipython文件的打开方式,Jupyter Notebook中运行.py文件,快速打开ipython文件的方法 ...
- 19.4 Boost Asio 远程命令执行
命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个run_command函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符 ...
- SpringCloud-07-Hystrix
Hystrix 熔断器 1.Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). 雪崩:一个服务失败,导致整条链路 ...
- Tauri VS. Electron - 真实项目的比较
文章翻译自:Tauri VS. Electron - Real world application 以下是正文: 在这篇文章中我将会用真实的项目来比较 Electron 和 Tauri: Authme ...
- Intel 14代酷睿提前上架加拿大:涨价最多7%
Intel将在10月17日正式发布14代酷睿,说白了就是13代酷睿升级版,代号就能说明一切--Raptor Lake Refresh. 首批发布的只是高端的K/KF系列,一共六款,分别是8+16 24 ...
- C++对象之谜(封装篇)
这篇博客简要记录下C++对象的相关内容,以便回顾时使用. C++类的定义 我们使用C++定义一个矩形(Rectangle)类,它的基本属性有:长(width),宽(width), 对矩形的基本操作有: ...
- CH57x/CH58x/CH59x iBecaon广播
首先要先了解iBecaon.iBecaon是苹果基于BLE广播的一个技术规范:只要设备生产商符合特定标准,就可以要求苹果授权它们在其设备上使用"iBeacon" 商标. 在设备生产 ...
- 【Android】使用 Broadcast 实现进程间通讯
1 Broastcast 简介 Broadcast(广播)是 Android 中一种广泛运用的在应用程序之间传输信息的机制.使用 Broadcast 能够很方便得实现进程间通讯,一端通过 send ...