union組合成果集時的order成績。本站提示廣大學習愛好者:(union組合成果集時的order成績)文章只能為提供參考,不一定能成為您想要的結果。以下是union組合成果集時的order成績正文
近日,在一個項目頂用到union組合兩個select成果,調試sql時老是報錯,所報毛病也只是說在union鄰近有成績,由於sql頂用到了group,我想或許是union不支撐吧,因為時光緊,就先在法式中做了歸並處置。但法式員關於代碼的完善性請求老是不克不及廢棄的,所以,經常會有如鲠在喉的感到,不弄明確心裡會不舒暢。
細心檢查了MS的在線贊助,在有關UNION的描寫中找到如許一段解釋:
假如應用 UNION 運算符,那末各個 SELECT 語句不克不及包括它們本身的 ORDER BY 或 COMPUTE 子句。而只能在最初一個 SELECT 語句的前面應用一個 ORDER BY 或 COMPUTE 子句;該子句實用於終究的組合成果集。只能在各個 SELECT 語句中指定 GROUP BY 和 HAVING 子句。
在這段解釋中並沒有說union不克不及用於group,而是說在各個Select中不克不及包括order by,而在我的語句中恰好就有這個,看來是我猜錯了。試了一下把order去失落,果真不會報錯了。也就是說,應用union的時刻,各查詢group是可以的,但不克不及order或compute。那假如說非要group,有無方法呢?正常情形下只能在最初應用,並且是針對組合後的成果集停止排序的,而我適才所說的group,就不克不及用於終究成果集,而只能用於每一個查詢。
這是正常的用法,有些人想在每一個查詢中先排序,然後再union,也有非正常的用法,相似:
select * from (select a from [table] order by a) union ...
別的,union前面還可以加上all,在默許情形下,union時會刪除反復的項,假如加上all則不停止挑選,組合一切的成果。假如能肯定各查詢成果不會有反復的項,最好就帶上all,由於如許照樣可以進步一些效力的。