2011-01-19 27 views
1

我使用SQL Server 2000中我有多個指標分析,我不得不使用另一個表中提取不同組的從mumtiple表中的記錄。我使用如何使用UNION,而使用SELECT子句從SQL Server中的許多表在表中插入2000

INSERT INTO T1(A,B) 
(SELECT E,R FROM T2) 
UNION 
(SELECT Z,X FROM T3) 

查詢分析器拋出的錯誤,雖然使用UNION,你應該使用ORDER BY條款與SELECT。即使在這樣做後,我不能聯合兩個不同的查詢,這些查詢在select子句中回溯相同的列。

什麼是插入使用SELECTSUNIONSORDER BY的正確方法。

+1

剛剛擺脫括號和您發佈的查詢應在工作原理假設它返回一個union兼容的結果(雖然它會做2個笛卡爾連接,這可能不是所需的語義)。當然,結果將需要與`insert`語句兼容,只有當涉及到的所有4個表只有1列時纔會出現這種情況。坦率地說,你發佈的示例代碼看起來很無意義。你能解釋一下爲什麼/你在這裏使用`order by`,因爲它甚至沒有任何地方的功能? – 2011-01-19 12:06:44

+0

它也讓我感到驚訝。對於像CREATE TABLE BB(NAME VARCHAR(200))這樣的簡單插入,插入到BB選擇名稱從FS77..S_ORG_EXT中找到名稱像%'Hos%'聯合選擇名稱從FS77..S_ORG_EXT其中名稱像'%com%'很好,但對於複雜的一個即時通訊使用不同的SQL使用UNION,選擇和不同的WHERE子句中的同一列進行回滾時出現錯誤,說服務器:消息104,級別15,狀態1,行1 ORDER BY項目必須出現在如果語句包含UNION運算符,則選擇列表。 – Walker 2011-01-19 12:45:03

回答

3

僞太神祕 這是非常不可能得到每跨2列各工會組件

INSERT INTO T1(A,B) 
(SELECT * FROM E,R) 
UNION 
(SELECT * FROM Z,X) 

注加入2個表(降低):如果你有BY子句中的任何命令,在所有的,它必須在工會

INSERT T1(A,B) 
SELECT P,Q FROM E,R 
UNION 
SELECT R,S FROM Z,X 

年底@updated基於錯誤文本「服務器上:消息104,級別15,狀態1,行1 ORDER BY項目必須出現在選擇列出如果語句包含一個UNION運算符「

當您有一個聯合嘗試對未出現在結果中的列執行ORDER BY時發生這種情況。考慮一個正常的ORDER BY涉及未選擇的列

select top 10 name from syscolumns order by xtype 

行是一致的,並且可以滿足查詢。但是,如果你沒有

select top 10 name from syscolumns where xtype > 50 
union all 
select top 10 name from syscolumns where xtype < 50 
order by xtype 

即使的xtype存在於UNION的兩個部分,但(這在END整個結果集的作品),它被提交給ORDER BY時,列不存在。你將不得不重寫它(如果你不想顯示xtype)作爲

select name from (
    select top 10 name, xtype from syscolumns where xtype > 50 
    union all 
    select top 10 name, xtype from syscolumns where xtype < 50 
) x 
order by xtype 

希望幫助

相關問題