如果我们有两个或多个具有相同列的表
表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
';'附近的语法不正确。
任何一位大师都能提出一些意见吗?谢谢!
答案 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
)
;