order by居然不能直接在union子句中使用

2021-09-23 21:39:45 字數 1745 閱讀 9709

今天乙個群中的兄弟問乙個問題,說有乙個表,表中有很多資料,其中有個字段type,希望從表中隨機取出10條記錄,其中有5條type=1另外5條type=0,比如下圖這樣:

但是那個兄弟說不對,語法有錯,我乍一看,好像沒有問題把,於是讓他把表定義發給我,我在本機試一下,表定義是:

create table [dbo].[question](

[id] [int] identity(1,1) not null,

[question] [varchar](50) not null,

[answer] [varchar](50) not null,

[type] [bit] not null,

constraint [pk_question] primary key clustered

([id] asc

)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]

) on [primary]

於是將我的語句輸進ssms,結果系統還真是報錯了:incorrect syntax near the keyword 'order'.

怎麼回事啊?怎麼看也不像有問題的啊。於是我單獨執行

select top 5 * from dbo.question

where [type]=1

order by newid()

對的啊。沒有問題,下面的半句也是一樣的語法結構,也沒有錯誤。但是把這兩個查詢union起來就錯了。奇怪啊。既然提示是order附近有錯,那麼我將order給去掉:

(select top 5 * from dbo.question

where [type]=1

)union

(select top 5 * from dbo.question

where [type]=0

)也沒有錯啊。也就是說在union子句中的查詢不能用order by。但是這兒我必須要用order by啊,要不然我怎麼取出隨機的5條記錄?不用union可以不?可以啊,建立乙個臨時表,將查詢出來的5條資料插進去,另外5條也是。然後再查詢臨時表,但是能不使用臨時表就盡量不要使用臨時表,何必弄的那麼複雜。

又要用order by 又要用union,怎麼辦?order by不能直接出現在union的子句中,但是可以出現在子句的子句中啊!於是查詢最終改寫成了:

select * from

(select top(5) * from dbo.question where [type]=1 order by newid() ) t1

union

select * from

(select top(5) * from dbo.question where [type]=0 order by newid()) t2

感覺有點彆扭,但是沒法,不知道為什麼sql server中不能在union子句中使用order by,所以只有出此下策了。

子查詢中不能包含order by

今天做開發遇到乙個問題 寫sql語句 select top 20 from select top 200 from ump user order by id ttnn sql查不出來 因為子查詢中不能包含order by 子句 具體原因 在8i以前,子查詢中不能包含order by子句。從8i開始,...

Ohone SDK的模擬器居然不能聯網

前幾天偷懶,直接把android下跑得很好的apk提交到了移動的mm,測試人員通知在多普達android手機上上測試失敗,無法連線伺服器。心想果然偷懶是不好的,多普達的機器可能有些差別吧,心存僥倖地把多普達從對應平台刪去,只留下聯想的o1和o1e,這兩個總是標準的android os了吧,嘿嘿。恩,...

this 不能在ajax中直接使用

今天遇到的乙個問題是如何檢查某個表單輸入是否有誤,我使用 get 與後台進行互動,拿到返回值後進行判斷,然後給對應的元素新增一些內容,突然發現沒有效果,通過排查後發現是處在 this 這個地方,在ajax中是無法直接使用 this 的,需要在進行ajax中事先定義變數,然後再在ajax中使用這些變數...