第二个select语句有必要要吗?直接
UPDATE a
   SET ac1 = (SELECT bc1
                FROM b
               WHERE b.ID = a.ID)这样就可以了吧

解决方案 »

  1.   

    楼上的关键是当A和B记录数不一样时就更新了A的所有记录,并将找不到ID的都设成空了
      

  2.   

    UPDATE A 
    SET A.AC1 = B.BC1
    FROM A,B
    WHERE A.ID = B.ID
      

  3.   

    猜想了一个,没环境试验update a set ac1=(select decode(bc1,null,a.id,bc1) from b where b.id=a.id)
      

  4.   

    oracle不支持 update ... from 语法,
    楼上的语句还有一点问题。
    照LZ的意思,你的最后一个=号也应该换成in。UPDATE a
       SET ac1 = (SELECT bc1
                    FROM b
                   WHERE b.ID = a.ID)
     WHERE a.ID IN (SELECT ID
                      FROM b)但也可以参照楼上的写法,不知道效率方面会不会有提高 UPDATE a
       SET ac1 = NVL ((SELECT bc1
                         FROM b
                        WHERE b.ID = a.ID), ac1)这关键看你的b表中缺少的a表的记录会不会太多啦。
    或者也可以把in改用exists,不过好像是效率上不会有太大区别,你可以自己比较一下。
    UPDATE a
       SET ac1 = (SELECT bc1
                    FROM b
                   WHERE b.ID = a.ID)
     WHERE EXISTS (SELECT 1
                     FROM b
                    WHERE b.ID = a.ID)