选择使用联合查询

Posted

技术标签:

【中文标题】选择使用联合查询【英文标题】:SELECT INTO USING UNION QUERY 【发布时间】:2011-04-30 10:36:59 【问题描述】:

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

查询1:有效

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2 

查询 2:不起作用。 错误: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
)

谢谢!

【问题讨论】:

【参考方案1】:

您必须在 SQL Server 中为派生表定义表别名:

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

“x”是本例中的表别名。

【讨论】:

当我尝试这个时,它并没有给我 TABLE1 和 TABLE2 的记录数的总和,它总是更少。你会碰巧知道为什么会这样吗?谢谢! @Christa - 这可能是由于两个表中有相同的行,它只会为联合创建一条记录。如果您使用UNION ALL,它不会删除重复项。【参考方案2】:

你也可以试试:

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

【讨论】:

【参考方案3】:
INSERT INTO #Temp1
SELECT val1, val2 
FROM TABLE1
 UNION
SELECT val1, val2
FROM TABLE2

【讨论】:

【参考方案4】:

这是 SQL Server 2017 的一种有效语法:

USE [<yourdb-name>]
GO

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

【讨论】:

【参考方案5】:
select *
into new_table
from table_A
UNION
Select * 
From table_B

这仅适用于 Table_A 和 Table_B 具有相同架构的情况

【讨论】:

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

以上是关于选择使用联合查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 查询生成器从表联合的结果中选择列?

在 Laravel Eloquent 中,你如何在联合范围之外进行两个联合查询和一个选择?

MySQL数据库联合查询与连接查询

分页查询+联合查询(MySQL)

分页查询+联合查询(MySQL)

如何将表连接到联合查询的结果