在SQL中合并2个表并保存到1个新表中

时间:2014-11-05 05:38:20

标签: sql sql-server merge

如果我们有两个或多个具有相同列的表

表1

Structure, Name, Active
1,A,1

表2

Structure, Name, Active
2,B,0

我们希望将这两个表组合起来并将其保存为新表

新表

Structure, Name, Active
1,A,1
2,B,0

这是代码

CREATE TABLE Amide_actives_decoys
(
    Structure NVARCHAR(255),
    Name NVARCHAR(255),
    Active INT
)
GO

INSERT Amide_actives_decoys
FROM (
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives 
)

将显示以下错误消息

  

Msg 156,Level 15,State 1,Line 10
  关键字“FROM”附近的语法不正确。

如果我们使用

,同样的事情
SELECT * INTO Amide_actives_decoys
FROM (
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives 
)

遵循这个答案

Joining a table onto itself in SQL and saving the result

错误信息将是

  

Msg 102,Level 15,State 1,Line 5
  ';'附近的语法不正确。

任何一位大师都能提出一些意见吗?谢谢!

5 个答案:

答案 0 :(得分:7)

此语法适用于不同的数据库:

INSERT INTO Amide_actives_decoys(Structure, Name, Active)
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives; 
  

在这种形式的INSERT中,子查询的输出成为一组   INSERT的输入值。

     

请注意SELECT语句中表达式的数据类型   子查询必须与INSERT的目标表中的数据类型匹配   言。

     

子查询返回的所有行都插入到   Amide_actives_decoys表。

     

如果任何一行由于违反约束而导致INSERT失败或   数据类型冲突,整个INSERT失败,没有插入行。

     

可以在INSERT语句中使用任何有效的子查询。

答案 1 :(得分:4)

我认为您需要UNION ALL否则您可能无法捕获所有数据;取决于表中的数据(重复等)。

INSERT INTO Amide_actives_decoys(Structure, Name, Active)
   SELECT * FROM Amide_decoys 
   UNION ALL
   SELECT * FROM Amide_actives; 

答案 2 :(得分:1)

一般语法是

INSERT INTO table2
SELECT * FROM table1;

你可以在这个案例中选择INTO语句

with cte as (select 1 col1 ,2 col2
union all
select 2,3) 
select * into #tabletest from cte

select *From #tabletest

答案 3 :(得分:1)

在你的答案中,问题是你没有为表格提供别名。我想你错过了一个' INTO'也在INSERT声明中。

查询1:

CREATE TABLE Amide_actives_decoys
(
    Structure NVARCHAR(255),
    Name NVARCHAR(255),
    Active INT
)
GO

INSERT INTO Amide_actives_decoys
SELECT  *
FROM    (
        SELECT * FROM Amide_decoys 
        UNION
        SELECT * FROM Amide_actives 
        ) LU --LU is added.

对于查询1,以下也是正确的

INSERT INTO Amide_actives_decoys
SELECT * FROM Amide_decoys 
UNION
SELECT * FROM Amide_actives 

查询2:

SELECT  * 
INTO    Amide_actives_decoys
FROM    (
        SELECT * FROM Amide_decoys 
        UNION
        SELECT * FROM Amide_actives 
        ) LU -- LU added

答案 4 :(得分:0)

create table Amide_actives_decoys
as
select Structure, Name, Active from 
(
SELECT * FROM Amide_decoys 
UNION
SELECT * FROM Amide_actives 
)
;