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)
update b set t.id = (select id from a where a.name=b.name);
如果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
UPDATE B SET T.ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);
UPDATE B SET ID = (SELECT ID FROM A WHERE A.NAME = B.NAME); 不会有问题的
真的会有。报错。 单行子查询返回多行记录。 你想想。如果B中有两个aa. 那么SELECT ID FROM A WHERE A.NAME = B.NAME 查出来就不是一行啊。就报错。
除非你B表的ID是主键或者有唯一约束,否则UPDATE B SET ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);是没问题的
实测数据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'); 实测结果:
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中没有的纪录更新为空
set b.id=(select a.id from a where a.name=b.name)
where exits (select 1 from a where a.name=b.name)
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
不会有问题的
单行子查询返回多行记录。
你想想。如果B中有两个aa. 那么SELECT ID FROM A WHERE A.NAME = B.NAME 查出来就不是一行啊。就报错。
除非你B表的ID是主键或者有唯一约束,否则UPDATE B SET ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);是没问题的
(
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');
实测结果:
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中没有的纪录更新为空
B表数据重复碍什么事呢?
唯一的话一个merge