资料库示例如下 :name是关键栏位

资料库A 表 t1name value

a 1

b 2资料库B 表 t1name value

a 3

c 4

现在想把资料库B的表t1合并到资料库A的表t1中,如果 name栏位相同则把value值相加后保存,否则就将记录直接插入到资料库A中,比如上面的示例,操作完成后应该如下

name valuea 4

b 2

c 4

sql语句应该如何写。。。。求高手帮助给出完整写法,非常感谢!


删掉一个


# 创建资料库
create database db_a;
create database db_b;
# 创建表
create table db_a.t1
(
name varchar(255) null,
value varchar(255) null
);
create table db_b.t1
(
name varchar(255) null,
value varchar(255) null
);
# 插入数据
insert into db_a.t1 values("a","1"),("b","2");
insert into db_b.t1 values("a","3"),("c","4");
# 根据你的需求查询数据
# 首先把两个库的t1表查出来,然后通过union all拼成一张新的表
# 然后直接按name做group, 把value值加一起就好了
select name,sum(value) from (select * from db_a.t1 union all select * from db_b.t1) as t group by name;

查出来数据以后,插入新的临时表,把原来的db_a.t1表改名,把临时把改成t1就好了


这个不算复杂需求吧,我知道oracle至少有两个方案,1,使用merger语句,2,使用存储过程


方法有很多

  1. 将资料库A中的表t1教小,则将t1导出成csv文件,然后导入资料库B中;如果t2较小则导出t2

2. 大数据资料库都提供database federation的组件,例如postgresql的fdw等,可以直接在两个库之间进行查询

3. 使用ETL工具


异构资料库的join或merge操作,可以使用etl工具或者其思想来实现。

所谓ETL,E抽取(Extract,同源或者不同源数据),T转换(Transform,数据流特定业务逻辑处理),T载入(Load,做好数据流合并,数据流转换后,写入目标库)

具体的工具或者说引擎,离线或者准实时清洗如:datastage,kettle,informatic等,实时数据流join如:flink、spark等

上面的思想都是异构数据源直接合并数据流的思想。

也可以,先把异构数据源,抽取到同构数据源,再做内部sql join也是一种思路。


使用attach然后读表1插入到表2


推荐阅读:
相关文章