A表                     B表
C列     D列             E列     F列 
1       null            1       a
2       null            2       b
3       null            3       c
求update语句(A表的C列关联B表的E列更新A表的D列)
使得结果如下:
A表                   
C列     D列        
1       欢迎:a           
2       欢迎:b          
3       欢迎:c           初学者 急等答案

解决方案 »

  1.   

    update a set a.d='欢迎:'||(select b.f from b where b.e=a.c)
      

  2.   

    update a
    set a.d=( select '欢迎:'||b.F
                from b 
       where b.e=a.c )
    where exists ( select 1 from b b1 where b1.e=a.c);
      

  3.   

    update A set d='欢迎:'||(select f from B where A.c=B.e)
      

  4.   

    另外的方法 表数据量比较大的时候 用这个 可能会快  
    create table TEMP as 
    select A.C,NVL('欢迎:'||B.F,  A.D) from 
    A, B
    WHERE A.C = B.E(+) ;
    DORP TABLE A;
    CREATE TABLE A AS
    SELECT * FROM TEMP ;DROP TABLE TEMP;
      

  5.   

    不是做联系A表的C,D列知识其中的两列还有好多列,另外以上的没有可以用的,咱能不来胡闹么?
      

  6.   

    SQL code
    update a
    set a.d=( select '欢迎:'||b.F
    from b 
    where b.e=a.c )
    where exists ( select 1 from b b1 where b1.e=a.c);
      

  7.   

    ORA-01427:single-row subquery returns more than one row
      

  8.   

    说了这个不行,你们光靠想是么?
    ORA-01427:single-row subquery returns more than one row
      

  9.   

    是不是语句实现不了吖,要写pl/sql吖
      

  10.   


    你b表的e列有重复的数据,所以会产生这个错误
    下面的语句,可以限制返回一行,但更新的数据不可控
    多表更新最好有无重复的关键字段关联
    UPDATE a
       SET a.d =
           (SELECT f FROM b WHERE a.c = b.e and rownum<2)
     WHERE EXISTS (SELECT 1 FROM b WHERE a.c = b.e);
      

  11.   

    UPDATE a
      SET a.d =
      (SELECT '欢迎:'||f FROM b WHERE a.c = b.e and rownum<2)
     WHERE EXISTS (SELECT 1 FROM b WHERE a.c = b.e);
      

  12.   


    -- 加个distinct还不行的话,我管你叫“爹”,不想问题的家伙,还在一味的埋怨人家!
    update a
    set a.d=( select distinct '欢迎:'||b.F
                from b 
           where b.e=a.c )
    where exists ( select 1 from b b1 where b1.e=a.c);
      

  13.   


    ------------------- 自个儿睁大眼睛看啦:SB似的! ---------------------------CREATE TABLE A(
    C NUMBER(18,0),
    D VARCHAR2(20)
    );INSERT INTO A(C,D) VALUES(1,NULL);
    INSERT INTO A(C,D) VALUES(2,NULL);
    INSERT INTO A(C,D) VALUES(3,NULL);COMMIT;
    CREATE TABLE B(
    E NUMBER(18,0),
    F VARCHAR2(20)
    );INSERT INTO B(E,F) VALUES(1,'a');
    INSERT INTO B(E,F) VALUES(2,'b');
    INSERT INTO B(E,F) VALUES(3,'c');COMMIT;scott@SZTYORA> SELECT * FROM A;         C D
    ---------- ----------------------------------------
             1
             2
             3已选择3行。已用时间:  00: 00: 00.01scott@SZTYORA> SELECT * FROM B;         E F
    ---------- ----------------------------------------
             1 a
             2 b
             3 c已选择3行。已用时间:  00: 00: 00.03scott@SZTYORA> update a
      2  set a.d=( select '欢迎:'||b.F
      3              from b
      4         where b.e=a.c )
      5  where exists ( select 1 from b b1 where b1.e=a.c);已更新3行。已用时间:  00: 00: 00.01scott@SZTYORA> SELECT * FROM A;         C D
    ---------- ----------------------------------------
             1 欢迎:a
             2 欢迎:b
             3 欢迎:c已选择3行。已用时间:  00: 00: 00.01