比较A表和B表的数据 A表的数据 如果在B表中不存在 则删除 A表中的数据 判断 a表中的 a1字段 为0时候 把此条记录 insert到 B表中 为1时候 不变a表和b表比较 查出不一致的数据 然后修改 a表不一样的数据 以B表数据为准
一共3个 第一个解决啦 麻烦第一个语句也写出来 下地参考下
其他的有点迷糊 入门小弟求大神SQL增删改查A表和B表

解决方案 »

  1.   


    1.DELETE FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.XXX=B.XXX)2.INSERT INTO B SELECT * FROM A WHERE A1=03.比较两张表中各个字段不一致,还不如直接一次性更新a表的数据,将b表的数据更新的a表中
    UPDATE A SET (X1,X2,X3.....) = (SELECT X1,X2,X3.....FROM B WHERE A.XXXX = B.XXXX)
      

  2.   

    2楼的 第一个只能把多得查出来吧? 数据不一样的出不来吧?
    主要做同步更新
    把A表的取出来和B表的比较
    以B表的数据为准
    如果A表的多了 则删除
    少了则添加
    数据不一样啦则更改
    然后A表中还会增加个字段根据这个字段  判断他是否将数据insert到C表中
      

  3.   


    create or replace procedure pro_test() as
      flg1 int(1), dataid char(10);
      -- 1:更新    2:删除   3:插入
    Begin
      Select case
               when (select 1
                       from b
                      where b.b1 = a.a1
                        and a.a2 = b.b2) = 1 then
                1
               else
                2
             end,
             a.a1
        into flg1, dataid
        from a ;
              Select case
                       when not exists (select 1 from a where b.b1 = a.a1) then
                        3
                     end,
                     b.b1
                into flg1, dataid
                from b 
                
        if (flg1 = 1) then 
            delete from a where a.a1 = dataid;
            insert into a select * from b where b.b1 = dataid;
        elsif(flg1 = 2) then 
            delete from a where a.a1 = dataid; 
        elsif(flg1 = 3) then 
            insert into a select * from b where b.b1 = dataid;
    end if;End;
    你看看用存储过程吧,可能有点错误,你改改。
    大体思路是这个样子的。
      

  4.   

    谢谢4楼 不过能不用存储过程吗 那个不会写
    在正常的sql中实现
      

  5.   

    正常的那种吗?   估计要写几段的样子,和一楼写的那种差不多
    一个SQL不能写完的。如果你只是简单的以B表为基准更新A表的话 ,你可以直接把A表数据删掉重新从B表导入。