A表和B表结构相同, col1,col2,col3,col4;(无主键)
   现在希望比较两个表的数据,如果A表有的数据,B表没有,则把该条记录插入到B表;如果B表有的数据,A表没有,则希望更新B表该条数据的col4字段;
    能够用一条SQl完成该任务吗?

解决方案 »

  1.   

    这是何必呢,用plsql处理又快又省事
      

  2.   

    insert into B 
    where exist
    (
    select aa.* from A aa
    where not exists
    (
    select 1 from B bb where aa.col1=bb.col1 and aa.col2=bb.col2 and aa.col3=bb.col3 and aa.col4=bb.col4
    )
    )
      

  3.   

    又是插入,又是更新,不可能用一个SQL语句搞定的。
      

  4.   

    merge into具体语法,自己查,时间久了,我不记得了
      

  5.   

    怎么也要两条SQL吧,一条INSERT,一条UPDATE 
    INSERT INTO B 
      SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.主键 = B.主键);
    UPDATE B SET COL4 = .. WHERE B.主键 = 
      SELECT B.主键 FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.主键 = B.主键);
      

  6.   

    既然没有主键,那么哪些字段可以确定记录唯一呢,col1,col2,col3全部还是部分呢,如果都确认不了那么A会出现重复记录,那样的话无论如何都不能实现的
      

  7.   

    SQL 語句不可以,用PL/SQL;
    以下代碼請參考下吧
    MERGER INTO B
    USING A 
    ON(A.COL1 = B.COL1)
    WHEN MATCHED THEN 
    UPDATE 
    SET B.COL2 =A.COL2,B.COL3=A.COL3,B.COL4=A.COL4
    WHEN NOT MATCHED THEN
    INSERT 
    VALUES(A.COL1.A.COL2,A.COL3,A.COL4)