有两个表A(id,sname,age),B(id,aname)。
要求是:把A表里符合A.id=B.id的记录的sanme列更新为B中aname列的值
例子:
A
------------
id    sname    age1     张三     10
2     李四     20
3     王五     30
B
------------
id    aname1     群众1
2     lisi
3     木头要求更新后A表数据如下:
A
------------
id    sname    age1     群众1     10
2     lisi      20
3     木头      30
各位,用sql语句怎么写

解决方案 »

  1.   

    update a set a.sname=b.aname from b where a.id=b.id
      

  2.   

    --> 生成测试数据表: [a]
    IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
    GO
    CREATE TABLE [a] ([id] [int],[sname] [nvarchar](10),[age] [int])
    INSERT INTO [a]
    SELECT '1','张三','10' UNION ALL
    SELECT '2','李四','20' UNION ALL
    SELECT '3','王五','30'--> 生成测试数据表: [B]
    IF OBJECT_ID('[B]') IS NOT NULL
    DROP TABLE [B]
    GO
    CREATE TABLE [B] ([id] [int],[aname] [nvarchar](10))
    INSERT INTO [B]
    SELECT '1','群众1' UNION ALL
    SELECT '2','lisi' UNION ALL
    SELECT '3','木头'--SELECT * FROM [a]
    --SELECT * FROM [B]-->SQL查询如下:
    UPDATE a
    SET    a.sname = b.aname
    FROM   b
    WHERE  a.id = b.idSELECT * FROM a
    /*
    id          sname      age
    ----------- ---------- -----------
    1           群众1        10
    2           lisi       20
    3           木头         30(3 行受影响)
    */
      

  3.   

    好迅速,谢谢,试过了,问题已解决,再问一个,我看到你的好多回帖中都会给楼主搞上例子(再次感谢),例子中你都是用
    INSERT INTO [B]
    SELECT '1','群众1' UNION ALL
    SELECT '2','lisi' UNION ALL
    SELECT '3','木头'
    这样的语句来插入数据的,麻烦问一下,为什么这样用,那些书上不都是说用类似
    insert into B  ....  values(...) 的语句么,这个是额外的问题,选择回答,呵呵
      

  4.   


    从某种意义上说,批量插入数据用 insert tb select ... union all select ... 比insert tb values(...)来得高效。
      

  5.   

    insert into values 这个每句都是一条记录,一次提交,多个事务insert into select 这个就是一句,多条数据,一次提交,一个事务