我正在尝试将两个表全部联合(将两个表(它们具有相同的列名)完全连接在一起),但是用联合的结果更新第二个表。
下面的代码获得我想要的结果,但不使用结果更新表2
SELECT * FROM表2
全部联盟
SELECT * FROM表1
例如:
图名称| Coloumn1 | Coloumn2 | (更多列名称)
名称1 |数据1 |数据1
名称2 |数据2 |数据2
名称3 |数据3 |数据3
图名称| Coloumn1 | Coloumn2 | (更多列名称)
名称4 |数据4 |数据4
名称5 |数据5 |数据5
名称6 |数据6 |数据6
图名称|数据1 |数据2 | (更多列名称)
名称1 |数据1 |数据1
名称2 |数据2 |数据2
名称3 |数据3 |数据3
名称4 |数据4 |数据4
名称5 |数据5 |数据5
名称6 |数据6 |数据6
答案 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