将A表中的aa字段,用B表的 bb字段 更新。
更新条件 A.DD = B.MM 记录多条,怎么写SQL.谢谢!

解决方案 »

  1.   

    OMG,这是第三次贴这段代码了。
    若是10以下还需要加上when not matched
    merge into A m
    using B n
    on (m.DD = n.MM)
    when matched then
    update set m.aa = n.bb;good luck!
      

  2.   

    update a set aa=(select bb from b where a.dd=b.mm)
      

  3.   

    用这个看看 UPDATE A SET A.aa = (SELECT B.bb FROM A, B WHERE A.DD = B.MM) 
      

  4.   

    直接执行呀,在sqlplus 或者pl/sql developer command窗口或sql窗口
      

  5.   

    to:2楼的 我的数据库是9i 当 when not matched  我不想做 insert 操作,但做insert 系统提示 值不够?以下是我的SQLMERGE INTO wd_kokyaku_rireki k_rk
    USING m_jusyo m_jyo
    ON (m_jyo.yubin_no = k_rk.kibou_yubin_no AND m_jyo.jis_jusyo_cd = k_rk.kibou_jis_cd)
    WHEN MATCHED THEN
        UPDATE
        SET    k_rk.kibou_town = m_jyo.town
    WHEN NOT MATCHED THEN
       INSERT
        VALUES
            (m_jyo.town);
      

  6.   

    再问:不用这个直接写SQL 不可以吗?
      

  7.   

    update a set aa=(select bb from b where a.dd=b.mm)
      

  8.   

    直接用update a set aa=(select bb from b where a.dd=b.mm)不就行了,用什么merge呀,酷了点儿
      

  9.   

    如果直接用update语句:update a set aa=(select bb from b where a.dd=b.mm)
    若子查询里面搜索出来不是一个结果,那么如何赋值?
    ps:本人菜鸟
      

  10.   

    而且直接用update a set aa=(select bb from b where a.dd=b.mm)  那么如果B表内没有匹配的列那么A表的aa属性就会设为空
      

  11.   

    这样是不可以的,这个语句没那么简单,一个SQL 执行不了。你试一下就知道了!
      

  12.   

    不好意思楼上的,我用的是ORACLE 数据库,SQL SERVER 我没试过好用不!
      

  13.   

    修正下,9i下不加when not matched也可以的,我那个应该可以直接用。10楼白兄的sql可以改下应该也可以用:
    update a set aa=(select bb from b where a.dd=b.mm) where exists (select 1 from b where a.dd=b.mm);不过要保证select bb from b where a.dd=b.mm查出的记录是唯一的。
      

  14.   

    2个表之间修改,通用的写法是update 但是oracle中update需要写子查询,比较麻烦可以用merge写法,比update速度更快