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



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

表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 
)

上将显示以下错误消息

消息156,级别15,状态1,第10行
关键字"FROM"附近的语法不正确。

如果我们使用也是一样的

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

按照这个答案

在SQL中将表连接到自身并保存结果

错误消息将是

消息102,级别15,状态1,第5行
";"附近的语法不正确。

任何一位大师能提供一些意见吗?谢谢

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

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语句中可以使用任何有效的子查询。

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

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

一般语法为

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
create table Amide_actives_decoys
as
select Structure, Name, Active from 
(
SELECT * FROM Amide_decoys 
UNION
SELECT * FROM Amide_actives 
)
;

在您的两个答案中,问题是您没有为表提供别名。我想您在INSERT语句中也漏掉了一个"INTO"。

查询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

SELECTtab1.firstName,tab1.lastName,表2.城市,表2.状态从表_1表1向左加入表_2表2打开tab1.personId=tab2.personId

最新更新