如何 'Union all' 两个 table 和更新第二个 table 的结果

How to 'Union all' two tables and the result to update the second table

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

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

更新table 2

SELECT * 来自 table 2

联合所有

SELECT * 来自 table 1

例如:

table 2

图表名称 |专栏1 |专栏2 | (更多列名称)

姓名 1 |数据1 |数据 1

名字2 |数据2 |数据 2

名字3 |数据3 |数据 3

table 1

图表名称 |专栏1 |专栏2 | (更多列名称)

姓名4 |数据4 |数据4

姓名5 |数据5 |数据5

姓名6 |数据6 |数据6


最终结果(我希望 table 2 看起来像)

图表名称 |数据1 |数据2 | (更多列名称)

姓名 1 |数据1 |数据 1

名字2 |数据2 |数据 2

名字3 |数据3 |数据 3

姓名4 |数据4 |数据4

姓名5 |数据5 |数据5

姓名6 |数据6 |数据6

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

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

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

如果你想更新 table 2 并联合所有 table 1 和 table 2,这与从 table 1 插入行不一样吗到 table 2?

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

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

)

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

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