表table1字段
id  name   value
1    a      aaaa
2    b      bbbb
3    c      cccc
4    d     dddd
name字段是唯一的
====================
表table2字段
id  name   clientname
11    a      客户1
11    a      客户2
12    b      客户3
13    c      客户4
11    a      客户5
11    a      客户6
要求用一条SQL语句更新表table1中id的值更新后table1中的记录如下
id  name   value
11    a      aaaa
22    b      bbbb
33    c      cccc
4     d     dddd

解决方案 »

  1.   

    update a
    set id = b.id
    from table1 a
    left join (select distinct id,name from table2) b on a.name = b.name
      

  2.   

    一个疑问:如果表table2的数据是这样的:
    id     name       clientname
    11         a             客户1
    11         a             客户2
    12         b             客户3
    13         c             客户4
    12         a             客户5
    11         a             客户6 
    update之后会是怎样的呢?
      

  3.   

    一个疑问:如果表table2的数据是这样的: 
    id           name               clientname 
    11                   a                           客户1 
    11                   a                           客户2 
    12                   b                           客户3 
    13                   c                           客户4 
    12                   a                           客户5 
    11                   a                           客户6   
    update之后会是怎样的呢?--------------------------数据库会顺序执行update语句,
    如果数据的物理排序就是这个顺序的话,那么update之后应该是12
      

  4.   

    因为保证了table2不会出现这种情况
      

  5.   

    好像不行如果表table1中字段值name在table2中找不着,则table1中id值变为了null
      

  6.   

    update a
    set id = case when isnull(b.id,'') = '' then id else b.id end
    from table1 a
    left join (select distinct id,name from table2) b on a.name = b.name
      

  7.   

    好像不行,
    如果table1中name字段值在table2中name找不着,则table1中id 是null
      

  8.   

    update a
    set id = case when  b.id is null then id else b.id end
    from table1 a
    left join (select distinct id,name from table2) b on a.name = b.name
      

  9.   

    happyflystone 谢谢,你的SQL事句执行结果正确