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