有一张表 TableA,有数据如下(十万条左右); id   name   date         rowid 001   ss    20100901      0ssd
 002   bb    20100908      0sds
 003   cc    20100908      0syt 
此表中 id 为主键,rowid为外键。有另一张表TableB ,数据(八万条左右)。rowid   name    date 
0ssd    ss      20100901
0sds    bb      20100909
0ise    hh      20100919现在需要TableB和TableA比较,存入TableC中。要求如下:(1)根据TableB表的rowid寻找TableA表中的数据,当TableA表中存在这条数据时,再看TableB表和TableA表的
date 字段是否相同,如相同,跳过,如不同,存入TableC表中,并加标示字段 falg 为1 例如:上面的数据rowid 为 0ssd 的,由于date 字段相同,不需要存入TableC表中。
      rowid 为 0sds  的,date不同 ,需要存入TableC中。 (2)当TableB表中的rowid在TableA表中不存在的数据,存入TableC表中,同时修改TableC 的falg为 2。
  
    例如: 上边表的最终结果为: TableC : id   name   date         rowid  falg
 
 002   bb    20100908     0sds    1
       hh    20100919     0ise    2由于数据量很大,如何最高效的得到结果,欢迎讨论。
  

解决方案 »

  1.   

    什么数据库,看看可否使用merge into
      

  2.   

    1)根据TableB表的rowid寻找TableA表中的数据,当TableA表中存在这条数据时,再看TableB表和TableA表的
    date 字段是否相同,如相同,跳过,如不同,存入TableC表中,并加标示字段 falg 为1insert into tablec c
      select 1, id, name, date, rowid
        from tablea a
       where not exists (select id
                from tablea a, tableb b
               where a.rowid = b.rowid
                 and a.date = b.date)(2)当TableB表中的rowid在TableA表中不存在的数据,存入TableC表中,同时修改TableC 的falg为 2。insert into tablec c
      select 2, id, name, date, rowid
        from tablea a
       where exists (select id from tableb b where b.rowid != a.rowid)
      

  3.   


    insert into tablec c
      select 2, id, name, date, rowid
        from tablea a
       where exists (select id from tableb b where b.rowid != a.rowid)这个有问题吧,tableb表中没有ID字段哦,即使有,当b.rowid !-a.rowid 的 时候,tableb表中的id也是空的啊
     
      

  4.   

    insert into tablec c
      select 2, id, name, date, rowid
      from tablea a
      where a.rowid exists (select rowid  from tableb b where b.rowid != a.rowid)