有两表
A(grdm,yhzh),grdm:个人代码,yhzh:银行帐户
B(grdm,yhzh),grdm:个人代码,yhzh:银行帐户
其中A表中还有很多其他的列,由于A表中的yhzh(银行帐户)有部分有误,所以需要逐渐修复。
   B表就是需要修复的银行帐户值。
两表中grdm是主键。我这么写update语句,提示“确实set关键字”
update a,b set  a.yhzh=b.yhzh where a.grdm=b.grdm;请问该如何修改啊?

解决方案 »

  1.   

    update   a
         set a.yhzh=
          (select b.yhzh
                 from b
           where a.grdm=b.grdm
      
         )
         where exists
         (
          select 1
            from b
           where a.grdm=b.grdm
           )
      

  2.   

    merge into A
    using (select grdm,yhzh from B)
    on A.grdm=B.grdm
    When matched update set A.yhzh=B.yhzh
    When not matched insert into (grdm,yhzh)
    values(B.grdm,B.yhzh);
      

  3.   

    update   a
         set a.yhzh=
          (select b.yhzh
                 from b
           where a.grdm=b.grdm
      
         )
         where exists
         (
          select b.yhzh
            from b
           where a.grdm=b.grdm
           )
      

  4.   

    请问为什么要用exist子句?直接用
    update  a 
        set a.yhzh= 
          (select b.yhzh 
                from b 
          where a.grdm=b.grdm 
      
        ) 
    不行吗?
      

  5.   

    明白了,不加EXISTS子句,会把无编号人员的值置空