自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server Order by在union子句不可直接使用的原因

數(shù)據(jù)庫 SQL Server
以下的文章主要向大家描述的是SQL Server Order by不可以直接在union子句中對(duì)其進(jìn)行使用的原因,以下就是文章的主要內(nèi)容的詳細(xì)描述。

此文章主要講述的是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,比如下圖這樣:

SQL Server Order by不能直接在union子句中使

 我一想,這還不簡單,按照要求,每個(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ì),語法有錯(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 = OFFSTATISTICS_NORECOMPUTE = OFFIGNORE_DUP_KEY = OFF,  
  10. ALLOW_ROW_LOCKS = ONALLOW_PAGE_LOCKS = ON) ON [PRIMARY]   
  11. ) ON [PRIMARY]   

于是將我的語句輸進(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()  

下面的半句也是一樣的語法結(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列,美中不足之處
責(zé)任編輯:佚名 來源: csdn.net
相關(guān)推薦

2010-11-11 16:53:28

SQL Server視

2010-11-09 10:10:08

SQL Server

2011-08-24 11:22:38

SQL ServerUNION代替OR

2010-09-06 11:24:32

SQL Server語句

2011-07-29 15:31:52

Oracle數(shù)據(jù)庫ORDER BY

2011-08-29 11:38:18

SQL Server 聯(lián)合結(jié)果集union

2011-08-16 16:10:12

MySQLORDER BY子句GROUP BY子句

2011-07-28 16:16:27

MySQL數(shù)據(jù)庫索引ORDER BY

2010-09-26 09:50:36

SQL Where子句

2010-11-09 16:29:39

SQL Server死

2010-07-20 08:35:54

SQL Server鎖

2011-04-01 14:43:14

SQL Server不可見字符

2010-09-26 14:46:19

SQL WHERE子句

2010-09-16 09:49:38

sql server建

2010-07-23 11:35:03

SQL Server置

2010-07-02 10:53:32

SQL Server死

2011-04-02 16:39:53

SQL Server查詢

2014-12-09 10:24:53

CrossApp開源

2010-09-08 15:42:46

SQL指令UNION

2010-11-12 11:19:19

SQL Server視
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)