有X、Y2个表,都有a、b、c三个字段。现在想用Y表的c字段数据替换X表的c字段数据,条件是当X.a=Y.a and X.b=Y.b 时用Y.c替换X.c,请问这个语句要怎么写?
可以这样写吗:
update x set x.c=y.c where x.a=y.a and x.b=y.b
谢谢!

解决方案 »

  1.   

    update x set x.c= (select max(y.c) from y where x.a=y.a and x.b=y.b)
    where exists (select 1 from y where  x.a=y.a and x.b=y.b)
      

  2.   

    update x set x.c=y.c from x,y where x.a=y.b and x.b.y.b
      

  3.   

    具体语句如下看有什么错误吗?
    update "GADATA0017"."ITEMACTIVITY"  set  "GADATA0017"."ITEMACTIVITY"."STRCONTRACTNO" = (select "GADATA0063"."ITEMACTIVITY"."STRCONTRACTNO"  from "GADATA0063"."ITEMACTIVITY"  WHERE ( ( "GADATA0063"."ITEMACTIVITY"."LNGRECEIPTTYPEID" = '13' ) AND ( "GADATA0063"."ITEMACTIVITY"."BYTPERIOD" = '6' ) AND ( "GADATA0017"."ITEMACTIVITY"."STRRECEIPTNO" = "GADATA0063"."ITEMACTIVITY"."STRRECEIPTNO" ) AND ( "GADATA0017"."ITEMACTIVITY"."LNGRECEIPTNO" ="GADATA0063"."ITEMACTIVITY"."LNGRECEIPTNO") ) )  where exists (select 1 from "GADATA0063"."ITEMACTIVITY" where ( ("GADATA0017"."ITEMACTIVITY"."STRRECEIPTNO" = '"GADATA0063"."ITEMACTIVITY"."STRRECEIPTNO" ) and  ( "GADATA0017"."ITEMACTIVITY"."LNGRECEIPTNO" = "GADATA0063"."ITEMACTIVITY"."LNGRECEIPTNO" )  and ( "GADATA0063"."ITEMACTIVITY"."LNGRECEIPTTYPEID" = '13' ) AND ( "GADATA0063"."ITEMACTIVITY"."BYTPERIOD" = '6' ) ) )
      

  4.   

    update x set x.c= (select y.c  from x,y where  x.a=y.a and x.b=y.b)
    where x.a||x.b in  (select x.a||x.b  from x,y where  x.a=y.a and x.b=y.b)不过,y.c每次必须只能取出一条才可以。
      

  5.   

    ...
    (select "GADATA0063"."ITEMACTIVITY"."STRCONTRACTNO"  from "GADATA0063"."ITEMACTIVITY"  WHERE ( ( "GADATA0063"."ITEMACTIVITY"."LNGRECEIPTTYPEID" = '13' ) AND ( "GADATA0063"."ITEMACTIVITY"."BYTPERIOD" = '6' ) AND ( "GADATA0017"."ITEMACTIVITY"."STRRECEIPTNO" = "GADATA0063"."ITEMACTIVITY"."STRRECEIPTNO" ) AND ( "GADATA0017"."ITEMACTIVITY"."LNGRECEIPTNO" ="GADATA0063"."ITEMACTIVITY"."LNGRECEIPTNO") ) )
    ...
    ---->出现多条就会报错了!
      

  6.   

    搂主没看清楚我的答案吗?select max(y.c) from y where x.a=y.a and x.b=y.b,这里要有max()的,要不然出现多条会报错,还有最好给表取别名,字段太长也容易出错
      

  7.   

    呵呵,我也在更新一个表,不过是在FOXPRO里面的,我是这样的:
    从新表中读出第一条记录,然后用其中一个字段在旧表中查找,找到的话把旧表的那条记录删除,然后把新表的插进去;如果找不到就直接插进去。效率极低,慢得要命,不知道有什么好办法。
      

  8.   

    duanzilin(寻)的语句应该没有问题啊
      

  9.   

    jinta2001的语句在sqlserver上没问题,我试过了,在oracle上也应该没问题