【ORACLE】 兩個order by的SQL使用 UNION 或者 UNION ALL 報錯 ORA-00933:sql命令未正確結束


 

在oracle sql中,要求order by是select語句的最后一個語句,而且一個select語句中只允許出現一個order by語句,而且order by必須位於整個select語句的最后。

union操作實際上做了兩部分動作:結果集合並 + 排序,

union all只進行結果集簡單合並,不做排序,效率比union高 。

例子:    表一:table1  查詢語句 : select  * from table1 t1  order by t1. c1  ;

            表二:table2  查詢語句 : select  * from table1 t2  order by  t2.c1  . 

  需求:合並表一表二結果集,使用union  或者 union all 都會報錯:ORA-00933 sql命令未正確結束

  原因:oracle 認為第一個order by結束后整個select語句就該結束了,但是發現后面沒有逗號(;)或斜線(/)結束符,反而后邊有 union all 或者 union,即sql語句並未結束,所以報錯。

  解決:使用  with ... as ... select ...

     with s1 as (select  * from table1 t1  order by t1. c1 ),

     s2 as ( select  * from table1 t2  order by  t2.c1 )

     select  *  from s1 union all (此處可以換為 union ) select * from s2

 

參考:https://blog.csdn.net/zhx624/article/details/20373785


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM