选择使用联合查询
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 查询生成器从表联合的结果中选择列?