oracle 两张表数据合并

时间:2022-10-09 14:55:34
现在有两张业表A,B
A表字段 id key1 value1;
B表字段  id  key2 value2;

想要合并成表C 是id key value
值是id key=key1值+key2值 value=value1值+value2值 不需要根据id去重。 怎么写?

15 个解决方案

#1


第一次发帖  谢谢支持!

#2


ID有重复值的?

#3


create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 

#4


引用 2 楼 yinan9 的回复:
ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

#5


引用 4 楼 beyioto 的回复:
Quote: 引用 2 楼 yinan9 的回复:

ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

如果这里的ID有重复,那么两张表join就会产生笛卡尔积,应该不会是你需要的结果,join表的时候有其他条件吗?
或者根据两表的主键join

#6


引用 3 楼 yang626916777 的回复:
create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 
不好意思 可能我没说清楚:
A表有数据:
 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk

                                      

#7


引用 3 楼 yang626916777 的回复:
create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 

这种写法存在一个问题,当一些数据不存在a中,但存在b表里面,这样的写法就会漏掉一些数据

#8


引用 5 楼 yinan9 的回复:
Quote: 引用 4 楼 beyioto 的回复:

Quote: 引用 2 楼 yinan9 的回复:

ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

如果这里的ID有重复,那么两张表join就会产生笛卡尔积,应该不会是你需要的结果,join表的时候有其他条件吗?
或者根据两表的主键join


不好意思 可能我没说清楚: A表有数据:
 1 re qwe
  2 ll  kjk
 B 表数据
 1 mm kill
   2 nn ikk
希望的C数据是:
 1 re qwe
  2 ll  kjk
  1 mm kill
  2 nn ikk

这里可以在创建一个表C的主键来标记

#9


引用 4 楼 beyioto 的回复:
 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk


这样的需求很简单,
insert into c
select * from a
union 
select * from b;
即可

#10


引用 9 楼 yinan9 的回复:
Quote: 引用 4 楼 beyioto 的回复:

 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk


这样的需求很简单,
insert into c
select * from a
union 
select * from b;
即可


嗯  问题在于表A和表B的字段名称不是一样的。 需要怎么写?

#11


如果不用考虑重复数据,使用union all
insert into c
select * from a
union all
select * from b;

注意union (all) 前后的select 列表中的字段数量与类型须保持一致

#12


[quote=引用 10 楼 beyioto 的回复:
嗯  问题在于表A和表B的字段名称不是一样的。 需要怎么写?

没有关系的,比如
select c1,c2 from a
union all
select c3,c3 from b;
只要保证两个(或许有多个)select之后的字段数量相同
且相应位置的字段类型一致,c1与c3一致,c2与c4一致

#13


用union all就可以了 字段不同可以as成相同的

#14


引用 13 楼 yang626916777 的回复:
用union all就可以了 字段不同可以as成相同的
这个不错

#15


引用 14 楼 hou610433155 的回复:
Quote: 引用 13 楼 yang626916777 的回复:

用union all就可以了 字段不同可以as成相同的
这个不错


嗯 谢谢 yang626916777   解决了! Cool....

#1


第一次发帖  谢谢支持!

#2


ID有重复值的?

#3


create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 

#4


引用 2 楼 yinan9 的回复:
ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

#5


引用 4 楼 beyioto 的回复:
Quote: 引用 2 楼 yinan9 的回复:

ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

如果这里的ID有重复,那么两张表join就会产生笛卡尔积,应该不会是你需要的结果,join表的时候有其他条件吗?
或者根据两表的主键join

#6


引用 3 楼 yang626916777 的回复:
create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 
不好意思 可能我没说清楚:
A表有数据:
 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk

                                      

#7


引用 3 楼 yang626916777 的回复:
create table c as select a.id,a.key1+b.key2 as key,a.value1+b.value2 as value
from a,b 

这种写法存在一个问题,当一些数据不存在a中,但存在b表里面,这样的写法就会漏掉一些数据

#8


引用 5 楼 yinan9 的回复:
Quote: 引用 4 楼 beyioto 的回复:

Quote: 引用 2 楼 yinan9 的回复:

ID有重复值的?
好吧当没有这个条件 其实这个ID也不是ID 就是不用去重就行!

如果这里的ID有重复,那么两张表join就会产生笛卡尔积,应该不会是你需要的结果,join表的时候有其他条件吗?
或者根据两表的主键join


不好意思 可能我没说清楚: A表有数据:
 1 re qwe
  2 ll  kjk
 B 表数据
 1 mm kill
   2 nn ikk
希望的C数据是:
 1 re qwe
  2 ll  kjk
  1 mm kill
  2 nn ikk

这里可以在创建一个表C的主键来标记

#9


引用 4 楼 beyioto 的回复:
 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk


这样的需求很简单,
insert into c
select * from a
union 
select * from b;
即可

#10


引用 9 楼 yinan9 的回复:
Quote: 引用 4 楼 beyioto 的回复:

 1 re qwe
 2 ll  kjk
B 表数据
 1 mm kill
  2 nn ikk
希望的C数据是:
 1 re qwe
 2 ll  kjk
 1 mm kill
 2 nn ikk


这样的需求很简单,
insert into c
select * from a
union 
select * from b;
即可


嗯  问题在于表A和表B的字段名称不是一样的。 需要怎么写?

#11


如果不用考虑重复数据,使用union all
insert into c
select * from a
union all
select * from b;

注意union (all) 前后的select 列表中的字段数量与类型须保持一致

#12


[quote=引用 10 楼 beyioto 的回复:
嗯  问题在于表A和表B的字段名称不是一样的。 需要怎么写?

没有关系的,比如
select c1,c2 from a
union all
select c3,c3 from b;
只要保证两个(或许有多个)select之后的字段数量相同
且相应位置的字段类型一致,c1与c3一致,c2与c4一致

#13


用union all就可以了 字段不同可以as成相同的

#14


引用 13 楼 yang626916777 的回复:
用union all就可以了 字段不同可以as成相同的
这个不错

#15


引用 14 楼 hou610433155 的回复:
Quote: 引用 13 楼 yang626916777 的回复:

用union all就可以了 字段不同可以as成相同的
这个不错


嗯 谢谢 yang626916777   解决了! Cool....