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;请各位大神赶快帮帮,数据量太大了,无法人工进行比对,谢谢~~~~~~~~~~~~~

解决方案 »

  1.   

    楼主研究一下 merge 的用法,可以解决你的问题,手机上写这个太费劲了;
      

  2.   

    一楼,你好,我用了你说的方式,但是还是提示我违反约束,约束条件就是这三个字段的值唯一
    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','','')
      

  3.   

    插入前A表本来就没这一行数据,怎么去判断value1,2为空
      

  4.   

    im_indicator_data  ,这张表的主键是哪几个字段? 是你那三个字段吗?建议你贴一下建表语句;
      

  5.   

    merge into A 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)
    ;觉得应该确定一下约束。有哪些,也可能违反了其他的约束什么的。
      

  6.   

    b表里那三个字段有重复,应该也不影响sql的执行吧,重复了只会在更新a表一次