巧用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查询就解决了变化的

新需求,让自己学习到新东西,还有这种解决问题的思路。如果有其他更好建议的小伙伴,欢迎留言讨论。

posted @ 2022-09-07 21:02  一只爱阅读的程序员  阅读(222)  评论(0编辑  收藏  举报