update t1 
 set (Col1) = ( select Col1  from t2
                            where t1.Col_Primary = t2.Col_Primary );
这样把t1中有的,t2中没有的记录的Col1设成 NULL了?

解决方案 »

  1.   

    SQL> SELECT * FROM T1;      COL1 CNAME
    ---------- ------------------------------
             1 A
             2 B
             3 CExecuted in 0.157 secondsSQL> SELECT * FROM T2;      COL1 CNAME
    ---------- ------------------------------
             2 B
             3 c
             4 dExecuted in 0.14 seconds
    SQL> update t1
      2   set (CNAME) = ( select CNAME  from t2
      3                              where t1.COL1 = t2.COL1);3 rows updatedExecuted in 0.141 secondsSQL> SELECT * FROM T1;      COL1 CNAME
    ---------- ------------------------------
             1 
             2 B
             3 cExecuted in 0.156 secondsSQL> update t1
      2   set (CNAME) = ( select CNAME  from t2
      3                              where t2.COL1 = t1.COL1)
      4   WHERE
      5   EXISTS(
      6     SELECT 1 FROM T2 WHERE t1.COL1 = t2.COL1
      7   ) ;2 rows updatedExecuted in 0.172 secondsSQL> SELECT * FROM T1;      COL1 CNAME
    ---------- ------------------------------
             1 A
             2 B
             3 cExecuted in 0.171 seconds
    这样真是很麻烦,期待高人指点
      

  2.   

    是要加exists如果数据量大的话
    update很花时间
      

  3.   

    SQL> update t1
      2    set (CNAME) = NVL(( select CNAME  from t2
      3                               where t1.COL1 = t2.COL1),CNAME)
      4  /3 rows updatedSQL>   SELECT * FROM T1;COL1 CNAME
    ---- -----
    3    c
    2    B
    1    A这样行吗??
    不用exists
      

  4.   

    你是想替t1有t2没有的就不更新吗
    如果t2.Col_Primary 在t2中有唯一约束的话可以这样写
    update
      (
       select t1.coll ,t2.coll coll2
       from t1,t2
       where t1.Col_Primary=t2.Col_Primary 
       ) 
       set coll=coll2