update a set flag = 1 where exists(select fieldb where a.fielda = b.fieldb)

解决方案 »

  1.   

    update a set flag=1 where exists (select fieldb from b where fieldb=a.fielda)
      

  2.   

    update a set flag=1 where exists (select fieldb from b where fieldb=a.fielda)
      

  3.   

    sql server 里,
    不管是in 还是exists, 都会是一个nested loop. 如果a和b都很大的话,就会非常非常慢。考虑到对大数据量的情况,应该想办法用merge join.所以,如果在fieldb.b上有一个unique的index, 那么:
    update a set flag = 1 
    from a inner join b
    on a.fielda=b.fieldb而如果不存在这么一个unique的约束,那大概只能使用临时表。
    select district fieldb into #tmp from b
    create unique clustered index ix_b on b(fieldb) with fillfactor=100
    update a set flag = 1 from a inner join #tmp b
    on a.fielda = b.fieldb
      

  4.   

    可是
    update a set flag = 1 
    from a inner join b
    on a.fielda=b.fieldb在from行
    报错:
     SQL command not properly ended