oracle中好像隻能
UPDATE A T1 SET B=(SELECT T2.B FROM B T2  WHERE T1.A=T2.A)
這樣寫,
這樣寫有什麼不好嗎?有什麼問題嗎?
oracle 和 sql server 的語法還是有一些差異的。用多了就習慣了。

解决方案 »

  1.   

    UPDATE  A  T1  SET  B=(SELECT  T2.B  FROM  B  T2    WHERE  T1.A=T2.A)  
    where exists (select 1 FROM  B  T2    WHERE  T1.A=T2.A)
      

  2.   

    UPDATE 只能更新一张表吧,更新关联表这样怎么操作那,不知道你还期待什么样的写法
      

  3.   

    UPDATE A T1 SET T1.B= T2.B
    FROM A T1 LEFT join b T2 on T1.A=T2.A 
    WHERE T1.A IS NOT NULL
    好象不行,大家能看看么
      

  4.   

    恩!很好 bzszp(www.bzszp.533.net) 说的很好
    因为用 exists 比下面的in好UPDATE A T1 SET B=(SELECT T2.B FROM B T2  WHERE T1.A=T2.A)
    where t1.a in (select a from b)
    exists并且解决了where 中可以有两个以上表联合检索的需求
      

  5.   

    你用的还是连接的语法阿,update只能更新一张表,具体sql bzszp写的比较清楚了阿
      

  6.   

    再问一下,我问上面的问题主要是那个b表啊,是我的一个查询,比如
    UPDATE A T1 SET B=(SELECT..... 语句很长..where... and T1.A=T2.A)
    where exists (SELECT..... 语句很长..where... and    T1.A=T2.A)那么这个"SELECT..... 语句很长..where..." 很长的语句是否执行了2次呢?就是说检索了两次呢?
      

  7.   

    是的,这样是为了防止不符合条件的纪录行被更新为null.
    即防止对整个表进行更新。