如果我们有两个或多个具有相同列的表
表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