使用UNION查询的SELECT INTO

59

我想使用以下查询在SQL Server中创建一个新表。但是我不明白为什么这个查询不起作用。

查询1:有效

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2 

问题2:无法工作。 错误:消息 170,级别 15,状态 1,第 7 行 第 7 行:附近有语法错误“)”。

SELECT * INTO [NEW_TABLE]
FROM
(
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
)
谢谢!
5个回答

123

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

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

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


当我尝试这样做时,它并没有给我TABLE1和TABLE2记录数的总和,总是少一些。您知道为什么会发生这种情况吗?谢谢! - Christa
5
由于两个表中有相同的行,使用UNION操作符时只会生成一条记录。如果使用"UNION ALL"操作符,它将不会删除重复项。 - Hashman

3
INSERT INTO #Temp1
SELECT val1, val2 
FROM TABLE1
 UNION
SELECT val1, val2
FROM TABLE2

1
有用但它不会创建表。 - Dan

3

您也可以尝试以下方法:

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

3

以下是适用于SQL Server 2017的一种有效语法:

USE [<yourdb-name>]
GO

SELECT * INTO NEWTABLE 
FROM <table1-name>
UNION ALL
SELECT * FROM <table2-name>

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

只有当Table_A和Table_B具有相同的模式时,此方法才有效


您可以使用三个(如果表位于链接服务器实例上,则为四个)名称格式来访问其他模式和/或数据库。 - OMG Ponies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接