+ -
当前位置:首页 → 问答吧 → 一个update 语句,大家进来看看。急。

一个update 语句,大家进来看看。急。

时间:2011-12-13

来源:互联网

A表
id name
1 aa
2 bb
3 cc
B表 
id name 
  aa
  cc

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

作者: sforat   发布时间: 2011-12-13

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)

作者: fudaliang1999   发布时间: 2011-12-13

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

作者: huangdh12   发布时间: 2011-12-13

如果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

作者: sforat   发布时间: 2011-12-13

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

作者: yinan9   发布时间: 2011-12-13

有重复数据就会报错的。这样。

作者: sforat   发布时间: 2011-12-13

引用 3 楼 sforat 的回复:

如果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 ID = (SELECT ID FROM A WHERE A.NAME = B.NAME);
不会有问题的

作者: yinan9   发布时间: 2011-12-13

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

作者: sforat   发布时间: 2011-12-13

引用 6 楼 yinan9 的回复:

引用 3 楼 sforat 的回复:

如果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 ID = (SELECT ID FROM A WHERE A……


除非你B表的ID是主键或者有唯一约束,否则
SQL code

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


是没问题的

作者: haoxiaoliang   发布时间: 2011-12-13

实测数据
SQL code

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');



实测结果:

作者: LuiseRADL   发布时间: 2011-12-13

热门下载

更多