union組合結(jié)果集時(shí)的order問題
仔細(xì)查看了MS的在線幫助,在有關(guān)UNION的描述中找到這樣一段說明:
如果使用 UNION 運(yùn)算符,那么各個(gè) SELECT 語句不能包含它們自己的 ORDER BY 或 COMPUTE 子句。而只能在最后一個(gè) SELECT 語句的后面使用一個(gè) ORDER BY 或 COMPUTE 子句;該子句適用于最終的組合結(jié)果集。只能在各個(gè) SELECT 語句中指定 GROUP BY 和 HAVING 子句。
在這段說明中并沒有說union不能用于group,而是說在各個(gè)Select中不能包含order by,而在我的語句中恰恰就有這個(gè),看來是我猜錯(cuò)了。試了一下把order去掉,果然不會(huì)報(bào)錯(cuò)了。也就是說,使用union的時(shí)候,各查詢group是可以的,但不能order或compute。那如果說非要group,有沒有辦法呢?正常情況下只能在最后使用,而且是針對(duì)組合后的結(jié)果集進(jìn)行排序的,而我剛才所說的group,就不能用于最終結(jié)果集,而只能用于每個(gè)查詢。
這是正常的用法,有些人想在每個(gè)查詢中先排序,然后再union,也有非正常的用法,類似:
select * from (select a from [table] order by a) union ...
另外,union后面還可以加上all,在默認(rèn)情況下,union時(shí)會(huì)刪除重復(fù)的項(xiàng),如果加上all則不進(jìn)行篩選,組合所有的結(jié)果。如果能確定各查詢結(jié)果不會(huì)有重復(fù)的項(xiàng),最好就帶上all,因?yàn)檫@樣還是可以提高一些效率的。
相關(guān)文章
判斷觸發(fā)器正在處理的是插入,刪除還是更新觸發(fā)
平常時(shí)寫觸發(fā)器(TRIGGER),一般會(huì)分別寫插入(INSERT),刪除(DELETE)和更新(UPDATE)單獨(dú)的觸發(fā)器2012-01-01獲取MSSQL 表結(jié)構(gòu)中字段的備注、主鍵等信息的sql
本文為大家詳細(xì)介紹下如何獲取MSSQL 表結(jié)構(gòu)中字段的備注、主鍵等信息,感興趣的朋友可以參考下2013-09-09SQL Server 查詢處理中的各個(gè)階段(SQL執(zhí)行順序)示例
SQL不同于與其他編程語言的最明顯特征是處理代碼的順序,以下就為大家詳細(xì)的介紹一下,需要的朋友可以參考下2013-07-07有關(guān)sqlserver帳號(hào)被禁用的處理方法
這篇文章主要介紹了有關(guān)sqlserver帳號(hào)被禁用處理方法,需要的朋友可以參考下2017-12-12Oracle、MySQL和SqlServe三種數(shù)據(jù)庫(kù)分頁查詢語句的區(qū)別介紹
這篇文章主要介紹了Oracle、MySQL和SqlServe三種數(shù)據(jù)庫(kù)分頁查詢語句的區(qū)別介紹 的相關(guān)資料,需要的朋友可以參考下2016-05-05sqlserver之datepart和datediff應(yīng)用查找當(dāng)天上午和下午的數(shù)據(jù)
這篇文章主要介紹了sqlserver之datepart和datediff應(yīng)用查找當(dāng)天上午和下午的數(shù)據(jù),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08SQL Server出現(xiàn)System.OutOfMemoryException異常的解決方法
這篇文章主要介紹了SQL Server出現(xiàn)System.OutOfMemoryException異常的解決方法,同時(shí)提供了微軟官方的解決方案,需要的朋友可以參考下2014-06-06使用FORFILES命令來刪除SQLServer備份的批處理
利用這些參數(shù)可以構(gòu)造下面的例子來解決你刪除備份腳本文件的難題。你可以基于更改時(shí)間/日期或者備份類型來創(chuàng)建腳本。你甚至可以構(gòu)造能夠同時(shí)參照兩種標(biāo)準(zhǔn)的腳本2012-05-05