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

时间:2018-08-15 17:13:52

标签: sql-server append union-all

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

下面的代码获得我想要的结果,但不使用结果更新表2

SELECT * FROM表2

全部联盟

SELECT * FROM表1

例如:

表2

图名称| Coloumn1 | Coloumn2 | (更多列名称)

名称1 |数据1 |数据1

名称2 |数据2 |数据2

名称3 |数据3 |数据3

表1

图名称| Coloumn1 | Coloumn2 | (更多列名称)

名称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

4 个答案:

答案 0 :(得分:3)

由于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

)

答案 1 :(得分:1)

我认为您只想将表1中的记录插入表2中:

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

请注意,当前查询的确会产生所需的中间结果。如果要使用该查询填充/创建新表,则可以使用。但是问题在于表2中已经有数据。

答案 2 :(得分:1)

如果要用表1和表2的全部并集更新表2,这与从表1到表2插入行不一样吗?

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

答案 3 :(得分:0)

如果您不希望重复,则可以消除不存在的重复项(如果有100个列标题,则相同),条件:table1和table2必须具有相同的列数和相同的列类型:

insert into table2
select distinct * from table1
except
select * from table2