一、业务场景

  目前参与开发的项目,之前的一个已上线的版本中有一类查询是根据两张表进行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. TienChin 代码格式化-项目结构大改造

    代码格式化 博主下载项目之后发现,整体的代码格式化风格,与 C 那种语言很相似,说明这个作者之前就是从事这块的导致风格有点类似,我们来格式化一下,当然这不是必要的,我是没习惯这种写法所以这里我写一下我 ...

  2. 用npm查看可安装的包版本

    1.查看包版本命令 npm view less-loader versions

  3. Excel 分列功能 帮助 用户 导入Excel

    今天遇见一个客户的 Excel有一列 就是 导入不进去  那列 基本都是 数字 我试了下  写入几个字符 就能导入  不写字符的 就是导入 不进去 龚蓼 告诉我 用分列功能 今天试了下  草 果然可以 ...

  4. Kafka-如何重设消费者位移(重设OFFSET)

    1. 为什么要重设消费者组位移? 我们知道,Kafka 和传统的消息引擎在设计上是有很大区别的,其中一个比较显著的区别就是,Kafka 的消费者读取消息是可以重演的(replayable). 像 Ra ...

  5. Hive-mapjoin详解(mapjoin原理)

    笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join).本文简单介绍一下两种join的原理和机制. 一 .Common ...

  6. HBase-compact的作用、两种实现方式、触发时机

    了解Flush触发条件后,这里产生了一个问题,频繁的flush会产生大量小文件,在对hbase进行查询时会产生大量IOPS,读取性能会受到很大的影响,同时也会给hdfs造成一定压力,hbase提供了一 ...

  7. NC16697 [NOIP2001]Car的旅行路线

    题目链接 题目 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中 ...

  8. WPF仿win10加载动画 可用于loading加载

    直接上xaml 没有cs代码 (自己琢磨了好久感觉这样能接受) <UserControl x:Class="WpfApp1.Loading" xmlns="http ...

  9. python 学习随笔1121

    Python 数据处理几个好用又简单的库: json re string pandas 与系统交互: subprocess os

  10. 解决邮件客户端QQ Mail及Thunderbird无法登入Outlook的问题

    最近无论是安卓手机的邮件客户端, 或者是 Ubuntu 下的 Thunderbird 都无法登入 Outlook 账号, 原因是需要开启双因素验证. 这个在 Outlook 界面上是不能直接设置的, ...