假设有两张表
table A,有上百个字段,假设用到以下三个字段:c1,c2,c3table B,也有很多字段,也用到以下三个:c1,c2,c3现在a.c3是有值的,b.c3是空的。要求把a.c3的值赋给b.c3,要求是a.c1=b.c1 and a.c2=b.c2
现在的问题是:表A有约700万条数据,表B有300万条数据。
该怎样写sql语句,使得update的效率最高,花费的时间最少?补充:根据c1,c2的值,可以唯一确定一条记录。

解决方案 »

  1.   

    update b
    set b.c3=
    (
    select a.c3
    from a
    where a.c1=b.c1 and a.c2=b.c2 
    )
      

  2.   

    1楼的应该没错啊?700万的量也不算打,能用一条sql搞定就用一条好!只要时间不是长的离谱
      

  3.   

    如果有问题的话那就是满足a.c1=b.c1 and a.c2=b.c2 返回的不止一条数据,那就麻烦了 
      

  4.   

    有问题就是:如果b跟a的记录没有关联,c3字段也被更新为null了
      

  5.   

    update b
    set b.c3=
    (
    select a.c3
    from a
    where a.c1=b.c1 and a.c2=b.c2 
    )
    where exists
    (select 1 from a
    where a.c1=b.c1 and a.c2=b.c2 and a.c3=b.c3)