假设相同结构的表有6个,表名分别是t1,t2,……t6
新建表t7,作为目标表。表7应有dateofmonth   User_ID  Detail1……Detail6。
我想的方法是这样:对这6个表依次进行遍历,在表7遇到有相同dateofmonth   User_ID的记录则update,否则insert。
需要函数如下:
procedure 1(var str : string);
begin
query1.close;
  query1.sql..clear;
  query1.sql.add(str);
  for I := 1 to query1.recordcount do 
  begin
取出v1:= dateofmonth   v2:=User_ID  v3:=Detail
判断 select count(*) as a from t7 where dateofmonth  =v1 and User_ID =v2
if a=0
  insert t7 values (v1,v2,…,v3…)
else a =1
  update t7 set Detailn = v3 where dateofmonth  =v1 and User_ID =v2
  end;
end;

解决方案 »

  1.   

    下面就是对insert和update语句的拼写,你可以根据当前是对第几个表操作判断插到第几列,update第几列,这个实现不难压,只是拼接sql的问题。
    然后调用
    1('select * from t1')
    1('select * from t2')
    1('select * from t3')
    1('select * from t4')
    1('select * from t5')
    1('select * from t6')
    update t7 set Detailn = v3 where dateofmonth  =v1 and User_ID =v2
    //这里少了
    query1.next;
      end;
      

  2.   

    cszhz(丑小鸭) 
    能否用左右联接实现呢?采用你所说的方法可以实现,可是对于大数据量好慢哟,不过不失为一种解决方案,先谢过你呢,分到最后再给,看看还有没有更好的方法。
      

  3.   

    cszhz(丑小鸭) 
    对于左右联接,我试了一下,按dateofmonth,userid相等原则合并时,相当简单和快捷,不需要
    判断插入位置和更新位置。但存在的问题是,当其中某一表中的dateofmonth,user_id在其它表中不存在时,这些记录会在合成中漏掉,我现在只需想个办法将这些少量的遗漏数据补上去就成了而且应该不用考虑定位,因为这时只用考虑Insert便够了。各种方法待我一一试来。
      

  4.   

    有多少个表是固定的吧?每个表的dateofmonth都不会重复?          
      

  5.   

    若要通过在联接结果中包括不匹配的行保留不匹配信息,请使用完整外部联接。Microsoft® SQL Server™ 2000 提供完整外部联接运算符 FULL OUTER JOIN,不管另一个表是否有匹配的值,此运算符都包括两个表中的所有行。
    试试:select dateofmonth,user_id,detail,t2.detail
    form t1 full outer join t2
       on (dateofmonth=t2.dataofmonth and user_id=t2.user_id)
      

  6.   

    bluetooth_2001(热情的沙漠) 
    对,表的数目可以固定下来,每个表的 dateofmonth+userid 两个字段组合不会重复,但单一字段会有重复的。
      

  7.   

    bluetooth_2001(热情的沙漠) 
    可是在Access97中好像不支持full outer join??
      

  8.   

    bluetooth_2001(热情的沙漠) 
    你是指在MsSql吧!
      

  9.   

    仅仅是思路,供参考.
    那些相同结构的表可不可以加一个TableIndex字段(值为常数,例如表n为n);
    然后 (select * from t1) union (select * from t2) ...得到一View,
    然后 group by dateofmonth,user_id 
    order by TableIndex