一、业务场景

  目前参与开发的项目,之前的一个已上线的版本中有一类查询是根据两张表进行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新项目的更多相关文章

  1. Mybatis中sql语句中的in查询,一定要判断null的情况

    不严谨的写法,可能会报错:in (),这种情况不符合mysql的语法. select from loanwhere LOAN_ID in <foreach item="item&quo ...

  2. sql语句中【模糊查询like的使用】

    1.like的使用: 在数据库软件中进行测试时,书写的格式是: 比如: select * from fdx.dbo.[User] where 1=1 and name like '%'+'a'+'%' ...

  3. 分享一篇:sql语句中使用子查询,可能会引起查询的性能问题,查询时间会变长

    前段时间,做自动化适配的时候,查找需要的数据的时候,使用到了dblink,跨数据库实例进行访问,整段sql拼接再加上dblink,在plsql查询的时候,性能还不是很长时间,最多2分钟可以查到,前期调 ...

  4. SQL语句中的日期查询

    我们先创建一个表: CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NULL COMMEN ...

  5. Mybatis中sql语句中的in查询,判断null和size为0的情况

    不严谨的写法,可能会报错:in (),这种情况不符合SQL的语法,导致程序报错. 如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据! 所以一个比 ...

  6. 在 SQL Server 数据库的 WHERE 语句中使用子查询

    这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...

  7. hibernate中使用sql语句进行表链接查询,对结果集的遍历方法

    今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_ ...

  8. Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束”

    Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束 Sql 中的连接查询:就是为了避免笛卡尔积,因为涉及到多表查询的化,不使用连接查询,会先将多个互相乘,求出笛卡尔积,然后在在里面查询符合的 ...

  9. SQL Server参数化SQL语句中的like和in查询的语法(C#)

    sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...

  10. SQL语句中的单引号处理以及模糊查询

    为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...

随机推荐

  1. tensorflow语法【tf.gather_nd、reduce_sum、collections.deque 、numpy.random.seed()、tf.gradients()】

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  2. C++ 实现的Ping类的封装

    Ping 使用 Internet 控制消息协议(ICMP)来测试主机之间的连接.当用户发送一个 ping 请求时,则对应的发送一个 ICMP Echo 请求消息到目标主机,并等待目标主机回复一个 IC ...

  3. C/C++ 提权与强制卸载DLL

    权限提升 #include <Windows.h> #include <stdio.h> BOOL SetPrivilege(LPCTSTR lpszPrivilege, BO ...

  4. 字节码编程,Javassist篇四《通过字节码插桩监控方法采集运行时入参出参和异常信息》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 字节码编程插桩这种技术常与 Javaagent 技术结合用在系统的非入侵监控中,这样 ...

  5. java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解

    我自己出了一道面试题,如下: public static void main(String[] args) { char a = '9'; char b = 9; char c = '我'; Syst ...

  6. linux-Shell将命令行终端输出结果写入保存到文件中

    (一)将输出与错误写到同一个文件(1)方法1 #!bin/bashjava -jar hbase-example.jar 2>&1 | tee hbase_log.txt 说明:0,1, ...

  7. [数据库] 数据库中的DDL、DML、DQL、DCL

    SQL 程序语言有四种类型,对数据库的基本操作都属于这四种类,也就是标题上显示的 DDL.DML.DQL.DCL. 1. DDL DDL(Data Definition Language 数据定义语言 ...

  8. 【LGR-153-Div.2】梦熊联盟 8 月月赛 Ⅳ & Cfz Round 1 & 飞熊杯 #1

    [LGR-153-Div.2]梦熊联盟 8 月月赛 Ⅳ & Cfz Round 1 & 飞熊杯 #1 \(T1\) luogu P9577 「Cfz Round 1」Dead Cell ...

  9. JS 保姆级贴心,从零教你手写实现一个防抖debounce方法

    壹 ❀ 引 防抖在前端开发中算一个基础但很实用的开发技巧,在对于一些高频操作例如监听输入框值变化触发更新之类,会有奇效.除了实际开发,在面试中我们也可能偶遇手写防抖节流的问题,鉴于不同公司考核要求不一 ...

  10. JS leetcode 移除元素 题解分析

    壹 ❀ 引 又到了每日一道算法题的环节,今天做的题同样非常简单,题目来源leetcode27. 移除元素,题目描述如下: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 va ...