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 初学者 急等答案
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 初学者 急等答案
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);
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;
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);
ORA-01427:single-row subquery returns more than one row
你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);
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);
-- 加个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);
------------------- 自个儿睁大眼睛看啦: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