巧用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 ...
随机推荐
- 字节码编程,Javassist篇五《使用Bytecode指令码生成含有自定义注解的类和方法》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 到本章为止已经写了四篇关于字节码编程的内容,涉及了大部分的API方法.整体来说对 J ...
- ROS节点通信(三)action
官方wiki:http://wiki.ros.org/actionlib 目录 1.说明 2.代码示例 2.1.定义数据结构 2.1.1.goal 2.1.4.result 2.1.3.feedbac ...
- ASP.NET Core 6.0+Vue.js 3 实战开发(视频)
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章或视频能成为你成长路上的垫脚石. 录制视频的体验 这是一个收费的视频,很抱歉,让您失望了. 我尝试做点收费的视频,不是因为我不 ...
- JuiceFS v1.0 beta2 发布|进一步提升稳定性
这是 JuiceFS v1.0 正式发布前的第二个 beta 版本,共有 16 位社区伙伴贡献了 150+ 次提交 .本次更新以 Bug 修复和稳定性提升为主,辅以大量的文档更新和测试用例优化,并带来 ...
- 在QEMU-KVM环境下部署Oracle 19.16 RAC
KVM环境和其他虚拟化或真实生产最大差异主要就是在实施前期准备工作上: 具体在 DB节点 和存储环境 的准备工作上有差异,本文会详细说明. 而剩余基本软件安装和补丁应用部分无差异,若不清楚可以直接参考 ...
- redmine获取cookie和其他系统实现单点登录
前言 最近有个需求,需要将我们一个平台对接到redmine,让用户可以通过这个平台直接在redmine提工单,需要实现免登录跳转.首先是想到去查redmine有无相应的单点登录功能,查到redmine ...
- 玩转 CMS
玩转 CMS 目前接手的内容管理系统(CMS)基于 ant-design-vue-pro(简称模板项目或ant-vue-pro) 开发的,经过许多次迭代,形成了现在的模样(简称本地项目). 假如让一名 ...
- The Network Adapter could not establish the connection errorCode 17002, state 08006
问题说明 今天在centos7虚拟机中运行java程序,程序启动需要连接主机的oracle,报错: The Network Adapter could not establish the connec ...
- powerdesigner自定义实体显示的属性
我做概要设计的时候需要画实体的逻辑模型图,默认的时候是这样的: 但是我想只保留属性名,隐藏数据类型和下面的横线怎么办?效果如下: 按以下操作即可实现:
- C++ 多线程的错误和如何避免(9)
有时候使用 std::atomic 比使用 mutexes 更高效 问题分析:使用多线程更新一些简单数据时,比如 int 型,bool 型等等,可以使用 std::atomic,这比 mutex 来得 ...