有時候,咱們須要作多條件查詢,多個條件爲「或」的關係,分類查詢等,通常會用到多段select語句,而後用union或者union all進行鏈接,進而查出須要的結果。sql
例如,數據庫
select 框架
a.id as id,ide
a.name as name,函數
a.age as age性能
from scama.table_name2 a字符串
where 1=1it
union allio
select table
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後傳遞給數據庫執行帶來的性能問題等等。
那麼如何進行更好的改進實現呢?
方式有不少,博主根據本身的經驗提供以下兩種方案可供參考。
一、將各段查詢語句,分開調用
將每段select單獨寫方法調用,最後再將每一個調用的結果彙總爲結果。
例如,
datatable dt1= 調用第一段的sql的結果;
datatable dt2= 調用第二段的sql的結果;
...
依次查詢完成,最後合併dt1,dt2....
這種方案針對前臺程序將sql拼接爲字符串,經過程序自己框架內實現的與數據庫的鏈接方式,執行sql語句。
二、後臺完成,將查詢的結果寫入臨時表或者中間表,直接查詢該表的結果
即,使用存儲過程或者函數,將須要查詢的多條sql語句插入至一張臨時表(物理表也可),而後返回結果。
這種方式,由於是在數據庫中完成,那麼有些須要查詢的字段,就能夠單獨寫語句查詢出來再賦值給當前結果。