SQL大概要实现这样的功能:
有两个表a和表b,结构不相同,表a字段:id,object_code,time_code,value1,value2等;表b字段:id,object_code,time_code,value1,value2;
我要将b中的内容插入到a中,id,object_code,time_code这三个字段是主键,目前存在如下问题:
插入时需要进行判断:1、如果三个字段主键无重复,就将表b数据插入到表a相应字段;
2、如果三个字段主键重复,我需要判断表a的value1或value2是否为空,如果value1为空就要将表b的value1更新到表a的value1,如果value2为空就要将表b的value2更新到表a的value2;请各位大神赶快帮帮,数据量太大了,无法人工进行比对,谢谢~~~~~~~~~~~~~
有两个表a和表b,结构不相同,表a字段:id,object_code,time_code,value1,value2等;表b字段:id,object_code,time_code,value1,value2;
我要将b中的内容插入到a中,id,object_code,time_code这三个字段是主键,目前存在如下问题:
插入时需要进行判断:1、如果三个字段主键无重复,就将表b数据插入到表a相应字段;
2、如果三个字段主键重复,我需要判断表a的value1或value2是否为空,如果value1为空就要将表b的value1更新到表a的value1,如果value2为空就要将表b的value2更新到表a的value2;请各位大神赶快帮帮,数据量太大了,无法人工进行比对,谢谢~~~~~~~~~~~~~
merge into im_indicator_data aa
using data bb
on (aa.time_code=bb.年份 and aa.indicator_code=bb.地区区分 and aa.object_code=bb.对象)
when matched then
update set
aa.value=bb.值,
aa.year_value=bb.memo,
aa.memo='a'
when not matched then
insert values(sys_guid(),bb.年份,bb.地区区分,bb.对象,bb.值,0,0,0,0,0,bb.memo,0,'a','','')
using B b
on (a.id = b.id and a.object_code = b.object_code and a.time_code = b.time_code)
when matched then
update set
a.value1 = nvl2(a.value1,a.value1,b.value1),
a.value2 = nvl2(a.value2,a.value2,b.value2)when not matched then
insert values (b.id,b.object_code,b.time_code,b.value1,b.value2)
;觉得应该确定一下约束。有哪些,也可能违反了其他的约束什么的。