我正在尝试将两个表 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 |
由于
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中的记录插入到表2中:
INSERT INTO table2 ([Diagram name], [Data1], [Data2])
SELECT [Diagram name], [Data1], [Data2])
FROM table1;
请注意,您当前的查询确实会产生您想要的中间结果。 如果您想使用该查询填充/创建一个新表,它会起作用。 但问题是表2已经有数据了。
如果你想用表1和表2的并集来更新表2,这不是和从表1向表2插入行一样吗?
Insert into table 2
select [Diagram name], [Data1], [Data2] from table 1
如果你不想重复,你可以消除那些不存在的(如果有100个列标题也是如此),条件:table1和table2必须具有相同的列数和相同的列类型:
insert into table2
select distinct * from table1
except
select * from table2