2010-10-25 61 views
24

我想用下面的查询在SQL Server中创建一个新表。我无法理解为什么这个查询不起作用。选择使用联合查询

查询1:工作

SELECT * FROM TABLE1 
UNION 
SELECT * FROM TABLE2 

QUERY2:不工作。 错误:Msg 170, Level 15, State 1, Line 7 Line 7: Incorrect syntax near ')'.

SELECT * INTO [NEW_TABLE] 
FROM 
(
SELECT * FROM TABLE1 
UNION 
SELECT * FROM TABLE2 
) 

谢谢!

回答

50

你必须定义一个表的别名在SQL Server中的派生表:

SELECT x.* 
    INTO [NEW_TABLE] 
    FROM (SELECT * FROM TABLE1 
     UNION 
     SELECT * FROM TABLE2) x 

“x”是在这个例子中,表的别名。

+0

当我尝试这一点,它并没有给我的记录数的总和TABLE1和TABLE2,它总是少。你会碰巧知道为什么会发生这种情况?谢谢! – Christa 2018-02-06 16:12:50

+1

@Christa - 这可能是由于在两个表中有相同的行,它只会为联合创建一条记录。如果你使用'UNION ALL',它不会删除重复项。 – Hashman 2018-02-16 18:10:46

1

你还可以尝试:

create table new_table as 
select * from table1 
union 
select * from table2 
+3

不是SQL Server语法。 – 2010-10-25 23:05:40

1
select * 
into new_table 
from table_A 
UNION 
Select * 
From table_B 

这只能如果表-A和表-B具有相同的架构

+0

您可以使用三个(如果该表处于链接服务器实例上,则使用四个)名称格式来访问其他模式和/或数据库。 – 2010-10-25 20:58:04