union all結合decode完成對兩個表的條件選擇
今天開發人員提了個需求,需求類似有兩個表a,b,如果a表中有記錄就將a表中的記錄查詢出來,如果a表中沒有記錄則將b表中的記錄查詢出來,並且希望透過一個sql語句實現。
從需求可以得知,入口在a表中的記錄數,這個很簡單通select count(*) from a如果返回值為0則證明a表中沒有記錄,非0則有記錄(返回值不可能為負數),剛開始想了很久,也用decode或case這種條件判斷表示式,可它們返回的結果都是一個值而不是一個結果集,最終想到結合union all可以實現,因為結果集只從兩個表中選一個,所以根本不存在去掉重複記錄,減少不必要的排序操作。最後實現的sql如下:
select * from a union all select * from b where decode((select count(*) from a),0,0,1)=0;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-700441/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- union all和union的區別
- union和union all的區別
- Union與Union All的區別
- 基於條件熵的特徵選擇熵特徵
- sql中union和union all的用法SQL
- 【SQL】UNION ALL 與UNION 的區別SQL
- Oracle中的Union、Union All、Intersect、MinusOracle
- sql中union和union allSQL
- React 的幾種條件渲染以及選擇React
- 表連線 join和(+)、union和uion allUI
- sql中UNION和UNION ALL的區別SQL
- 理解full outer jion,union,union all
- union 和union all 使用區別
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- MySQL學習(五) UNION與UNION ALLMySql
- 查詢集合操作union與union all
- ORACLE中union/union all/Intersect/Minus用法Oracle
- SQL UNION 和 UNION ALL 操作符SQL
- SQL Union和SQL Union All用法(轉)SQL
- mysql 兩個表結果合拼到一個表,用常量區別不同的表MySql
- `FULL JOIN` 和 `UNION ALL`
- Linq兩個from查詢條件
- Oracle的集合操作(union、union all、intersect、minus集合函式)Oracle函式
- Oracle 中Union、Union All、Intersect、Minus(並,交,差)Oracle
- 通過使用者選擇多個條件來進生相應的查詢
- MySQL--操作簡記(聯結表,組合查詢(UNION))MySql
- 無合適where條件過濾時儘量選擇order by後的欄位以驅動表進行查詢薦
- union all 最佳化案例
- MySQL 合併查詢union 查詢出的行合併到一個表中MySql
- SQL UNION 操作符 和 UNION ALL 操作符SQL
- Union和Union All到底有什麼區別
- MySQL 迴圈建表和結合兩表的updateMySql
- 透過union all把sql查詢的結果拼接起來SQL
- UX/UI設計工具的選擇:對設計師的13條重要選擇標準UXUI
- MySQL中使用or、in與union all在查詢命令下的效率對比MySql
- 初學 golang 選擇這兩個框架Golang框架
- Oracle union all 不走索引的優化Oracle索引優化
- union的兩個子查詢是否並行並行