如何“合并所有”两个表以及更新第二个表的结果

问题描述 投票:0回答:4

我正在尝试将两个表 UNION ALL(完全连接两个表(它们具有相同的列名))在一起,但用并集的结果更新第二个表。

下面的代码得到了我想要的结果,但没有用结果更新表2

SELECT * FROM table 2

UNION ALL

SELECT * FROM table 1

例如:

表2

图名称 第1栏 第2栏 (更多列名称)
姓名1 数据1 数据1
姓名2 数据2 数据2
姓名3 数据3 数据3

表1

图名称 第1栏 第2栏 (更多列名称)
姓名4 数据4 数据4
姓名5 数据5 数据5
姓名6 数据6 数据6

最终结果(我希望表 2 看起来像这样)

图名称 数据1 数据2 (更多列名称)
姓名1 数据1 数据1
姓名2 数据2 数据2
姓名3 数据3 数据3
姓名4 数据4 数据4
姓名5 数据5 数据5
姓名6 数据6 数据6
sql-server append union-all
4个回答
4
投票

由于

union all
不会删除重复项,因此会产生相同的结果:

insert into table2 (diagram, col1, col2)
select diagram, col1, col2 
from table1 t1 

如果您不想重复,您可以使用

not exists
:

删除那些重复项
insert into table2 (diagram, col1, col2)
select diagram, col1, col2 
from table1 t1 
where not exists (
    select 1
    from table2 t2 
    where t1.diagram != t2.diagram and t1.col1 != t2.col1 and t1.col2 != t2.col2

)

2
投票

我想你只是想将表1中的记录插入到表2中:

INSERT INTO table2 ([Diagram name], [Data1], [Data2])
SELECT [Diagram name], [Data1], [Data2])
FROM table1;

请注意,您当前的查询确实会产生您想要的中间结果。 如果您想使用该查询填充/创建一个新表,它会起作用。 但问题是表2已经有数据了。


2
投票

如果你想用表1和表2的并集来更新表2,这不是和从表1向表2插入行一样吗?

Insert into table 2
select [Diagram name], [Data1], [Data2] from table 1

1
投票

如果你不想重复,你可以消除那些不存在的(如果有100个列标题也是如此),条件:table1和table2必须具有相同的列数和相同的列类型:

insert into table2
select distinct * from table1
except
select * from table2
© www.soinside.com 2019 - 2024. All rights reserved.