union組合結果集時的order問題_MsSql

來源:互聯網
上載者:User
近日,在一個項目中用到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,因為這樣還是可以提高一些效率的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.