程序架构探讨—001 查询语句中多段select语句的方案

1356人阅读 评论(0) 收藏 举报
分类:

有时候,我们需要做多条件查询,多个条件为“或”的关系,分类查询等,一般会用到多段select语句,然后用union或者union all进行连接,进而查出需要的结果。
例如,
select
a.id as id,
a.name as name,
a.age as age
from scama.table_name2 a
where 1=1

union all

select
b.sn as id,
b.name as name,
b.age as age
from scama.table_name2 b
where 1=2

union all

select
c.serial_id as id,
c.name as name,
c.age as age
from scama.table_name3 c
where 1=3
;
此时程序实现时,存在不少的麻烦。例如,大段的相似的sql容易出错,后续的维护的不方便,以及如果程序拼接了sql后传递给数据库执行带来的性能问题等等。
那么如何进行更好的改进实现呢?
方式有很多,博主根据自己的经验提供如下两种方案可供参考。
1、将各段查询语句,分开调用
将每段select单独写方法调用,最后再将每个调用的结果汇总为结果。
例如,
datatable dt1= 调用第一段的sql的结果;
datatable dt2= 调用第二段的sql的结果;
...
依次查询完成,最后合并dt1,dt2....
这种方案针对前台程序将sql拼接为字符串,通过程序本身框架内实现的与数据库的连接方式,执行sql语句。

2、后台完成,将查询的结果写入临时表或者中间表,直接查询该表的结果
即,使用存储过程或者函数,将需要查询的多条sql语句插入至一张临时表(物理表也可),然后返回结果。
这种方式,因为是在数据库中完成,那么有些需要查询的字段,就可以单独写语句查询出来再赋值给当前结果。


 

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1857558次
    • 积分:23101
    • 等级:
    • 排名:第302名
    • 原创:396篇
    • 转载:19篇
    • 译文:0篇
    • 评论:492条
    博客专栏
    最新评论