2011-01-19 28 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 

希望帮助

相关问题