update a set b.prov=a.prov,b.city=a.city 
from a,b 
where exists (select 1 from b where b.mobile like a.area%) 
and b.mobile like a.area%我写的,大家看一下,我写的执行不成,对错不知道不说,还慢死了。大家给我指导一下。谢谢了。

解决方案 »

  1.   

    update b set b.prov=a.prov,b.city=a.city from a inner join b on left(b.mobile,7)=a.area
      

  2.   

    update 表b set prov=a.prov,city=a.city  from 表b b join 表a a on cast(b.mobile as char(7))=a.area
      

  3.   

    update b set b.prov=a.prov,b.city=a.city from a,b where left(b.mobile,7)=a.area
    这样也对是吧,因为默认是内联连?
      

  4.   

    inner join 不是内联接吗?小小,能加我QQ吗。6279529,我想学习,可也找不到个朋友教我啊。
      

  5.   

    我改成了
    update b set b.prov=a.prov,b.city=a.city from a inner join b on a.area like b.mobile+'%'因为我在b.mobile建了索引,这样好像可以加快查找速度。没错吧。
      

  6.   

    update b set b.prov=a.prov,b.city=a.city from a inner join b on  b.mobile like a.area+'%'
      

  7.   

    cast(b.mobile as char(7))=a.area
    、(b.mobile,7)=a.area 和 a.area like b.mobile+'%' 都是可以的,其中的速度只有自己体会
    因为我这里没有很多数据所以也体会不到,你应该都试一试,择优而行
      

  8.   

    这个任务我做过的,当时是用一个update试过,太慢了。后来改成存储过程搞定的。运算量太大。我当时是40万号码要得到区号
      

  9.   

    存储过程和SQL有什么太不一样吗,如果这个是SQL要编译多少次呢。不是运行前编译一次就行了吗?
    还是要编译很多次呢。
      

  10.   

    update b
    set b.prov=a.prov,
        b.city=a.city
    from a,b
    where left(b.mobile,7)=a.area
      

  11.   

    关注,希望得到最优的结果。还有内联,左连接,右连接不太懂。SQL SERVER自己会择优选择连接方式吧?
      

  12.   

    不会吧,是你指定的吧。内联就是得到两表相同的结果。
    左联得到左表中行所有的结果,如右表没有该行时给null
    右联得到右表中行所有的结果,如左表没有该行时给null
      

  13.   

    left(b.mobile,7)=a.area
    像这种是不可优化的sql语句,检索时利用不上索引。
      

  14.   

    邮件地址[email protected]好像错误吗