A表
id  name
1   aa
2   bb
3   cc
B表 
id  name 
    aa
    cc我想写个语句把表b变成
B表 
id  name 
1    aa
3    cc
怎么写?

解决方案 »

  1.   

    update b 
    set b.id=(select a.id from a where a.name=b.name)
    where exits (select 1 from a where a.name=b.name)
      

  2.   

    update b set t.id = (select id from a where a.name=b.name);
      

  3.   

    如果B中有重复数据呢?  2楼这样就报错的。
    A表
    id name
    1 aa
    2 bb
    3 cc
    B表  
    id name  
      aa
      cc
      cc
      aa
    我想写个语句把表b变成
    B表  
    id name  
    1 aa
    3 cc
    3 cc
    1 aa
      

  4.   

    UPDATE B SET T.ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);
      

  5.   

    UPDATE B SET ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);
    不会有问题的
      

  6.   

    真的会有。报错。
    单行子查询返回多行记录。
    你想想。如果B中有两个aa. 那么SELECT ID FROM A WHERE A.NAME = B.NAME 查出来就不是一行啊。就报错。
      

  7.   


    除非你B表的ID是主键或者有唯一约束,否则UPDATE B SET ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);是没问题的
      

  8.   

    实测数据CREATE TABLE T49
    (
        ID NUMBER(4),
        NAME VARCHAR2(20)
    );INSERT INTO T49 VALUES(1, 'aa');
    INSERT INTO T49 VALUES(2, 'bb');
    INSERT INTO T49 VALUES(3, 'cc');CREATE TABLE T50
    (
        ID NUMBER(4),
        NAME VARCHAR2(20)
    );INSERT INTO T50 (NAME) VALUES('aa');
    INSERT INTO T50 (NAME) VALUES('cc');
    INSERT INTO T50 (NAME) VALUES('cc');
    INSERT INTO T50 (NAME) VALUES('aa');
    实测结果:
      

  9.   

    update b  
    set b.id=(select a.id from a where a.name=b.name)
    where exits (select 1 from a where a.name=b.name)说明
    1、b表数据可以重复,但b表中任何一条记录只能对应a表中唯一一条纪录。否则会报错。
    2、where条件一定要加,如果不加where条件,会把b中有,但A中没有的纪录更新为空
      

  10.   

    A表有重复记录才会有这样的错,加distinct就行
    B表数据重复碍什么事呢?
      

  11.   

    11楼是正解, A表的NAME不重复,就不会有"单行子查询返回多行记录"的错误信息了。
      

  12.   

    name不唯一楼主你就自己看了办吧
    唯一的话一个merge