日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
SQLServerOrderby在union子句不可直接使用的原因

此文章主要講述的是SQL Server Order by不可以直接在union子句中對(duì)其進(jìn)行使用的原因,今天一個(gè)群中的朋友提出了一個(gè)問題,說有一個(gè)表,表中存在很多的相關(guān)數(shù)據(jù),其中有個(gè)字段type,希望從表中隨機(jī)取出10條記錄,其中有5條type=1另外5條type=0,比如下圖這樣:

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、蓋州ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的蓋州網(wǎng)站制作公司

 我一想,這還不簡(jiǎn)單,按照要求,每個(gè)取top 5,既然是隨機(jī)的取,那么就SQL Server Order by newid()就是了三,然后把所有數(shù)據(jù)union起來就得了。所以我立即給出了答案:

 
 
 
 
  1. select top 5 * from xxx where type=1 order by newid()   
  2. union   
  3. select top 5 * from xxx where type=0 order by newid()  

但是那個(gè)兄弟說不對(duì),語(yǔ)法有錯(cuò),我乍一看,好像沒有問題把,于是讓他把表定義發(fā)給我,我在本機(jī)試一下,表定義是:

 
 
 
 
  1. CREATE TABLE [dbo].[Question](   
  2. [id] [int] IDENTITY(1,1) NOT NULL,   
  3. [question] [varchar](50) NOT NULL,   
  4. [answer] [varchar](50) NOT NULL,   
  5. [type] [bit] NOT NULL,   
  6. CONSTRAINT [PK_Question] PRIMARY KEY CLUSTERED   
  7. (   
  8. [id] ASC   
  9. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,  
  10. ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]   
  11. ) ON [PRIMARY]   

于是將我的語(yǔ)句輸進(jìn)SSMS,結(jié)果系統(tǒng)還真是報(bào)錯(cuò)了:Incorrect syntax near the keyword 'ORDER'.

怎么回事啊?怎么看也不像有問題的啊。于是我單獨(dú)執(zhí)行

 
 
 
 
  1. select top 5 * from dbo.Question   
  2. where [type]=1   
  3. ORDER BY newid()  

下面的半句也是一樣的語(yǔ)法結(jié)構(gòu),也沒有錯(cuò)誤。但是把這兩個(gè)查詢union起來就錯(cuò)了。奇怪啊。既然提示是order附近有錯(cuò),那么我將order給去掉:

 
 
 
 
  1. (select top 5 * from dbo.Question   
  2. where [type]=1   
  3. )   
  4. UNION   
  5. (select top 5 * from dbo.Question   
  6. where [type]=0   
  7. )  

也沒有錯(cuò)啊。也就是說在union子句中的查詢不能用SQL Server Order by。但是這兒我必須要用order by啊,要不然我怎么取出隨機(jī)的5條記錄?不用union可以不?可以啊,創(chuàng)建一個(gè)臨時(shí)表,將查詢出來的5條數(shù)據(jù)插進(jìn)去,另外5條也是。然后再查詢臨時(shí)表,但是能不使用臨時(shí)表就盡量不要使用臨時(shí)表,何必弄的那么復(fù)雜。

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

 
 
 
 
  1. SELECT * FROM   
  2. (select TOP(5) * from dbo.Question where [type]=1 ORDER BY newid() ) t1   
  3. UNION   
  4. SELECT * FROM   
  5. (select TOP(5) * from dbo.Question where [type]=0 ORDER BY newid()) t2  

感覺有點(diǎn)別扭,但是沒法,不知道為什么SQL Server中不能在union子句中使用order by,所以只有出此下策了。

以上的相關(guān)內(nèi)容就是對(duì)SQL Server Order by不能直接在union子句中使用的介紹,望你能有所收獲。

【編輯推薦】

  1. MS SQL Server問題與其正確解答方案
  2. SQL Server 數(shù)據(jù)導(dǎo)入的實(shí)際行為規(guī)范描述
  3. SQL Server 2000的安全策略的正確打造
  4. SQL Server DateTime數(shù)據(jù)類型的另類解讀
  5. SQL Server identity列,美中不足之處

網(wǎng)頁(yè)標(biāo)題:SQLServerOrderby在union子句不可直接使用的原因
網(wǎng)頁(yè)鏈接:http://m.5511xx.com/article/dpoicos.html