更多内容请参考:http://blueram.iteye.com/blog/618855
假设我们有test1,test2 两表
test1
NO NAME
---------- ----------
1 a
2 b
3 c
test2
NO NAME
---------- ----------
1 aa
2 bb
如果要将test1表与test2表NO字段相等的记录的name字段更新为与test2表中的name字段的值,即以下效果:
test1
NO NAME
---------- ----------
1 aa
2 bb
3 c
那么以下的语句的效果为:
update test1 a set name=(select name from test2 b where a.no=b.no);
test1
NO NAME
---------- ----------
1 aa
2 bb
3
要出想要的效果,可以用下面的语句来实现.
update test1 a set name=(select name from test2 b where a.no=b.no) where
exists(select name from test2 b where a.no=b.no);
也可以用下面的语句来实现,前提是给test2表的NO设为主键:
alter table test2 add primary key(no);
update (select a.name aname,b.name bname from test1 a,test2 b where a.no=b.no) set aname=bname;