A、B两个表,表A字段a、b,表b字段a、c,请问如何将A表b字段替换为B表c字段

请不要使用这个:update A set A.b=(select B.c from B where A.a=B.a),因为这个是有语法错误的哈

请哪位高手帮忙解决下,鄙人将十分感谢,很急很急哈
谢谢各位的解答!
问题我已经解决了哈,原来是因为A表的a字段不是唯一而造成的。希望大家能引以为戒哈!

第1个回答  2012-09-17
你写的语句没有错误,是其它别的地方出错了。
update A set b=(select c from B where a=A.a);追问

这个update A set A.b=(select B.c from B where A.a=B.a),的确是“要报单行子查询返回多个行”的错误,我都试了千万遍了,能帮忙解决一下吗

追答

把两个表的结构贴上来,再说一下修改要求,或许能帮你解决问题。

本回答被提问者采纳
第2个回答  2012-09-17
没有语法问题,如果这个语句报错,有可能是因为select B.c from B where A.a=B.a子句的查询结果返回多行造成的。
你可以试试这样写:
update A set A.b=(select B.c from B where A.a=B.a and rownum = 1)追问

嗯..的确是返回多行造成的,因为我要实现几千条数据的修改,所以我就只能想到这里了,加了rownum=1后,是可以实现修改,但是只能修改一部分,不知道为啥
还有其他办法解决吗

追答

你现在需要考虑的问题不是语句的写法,而是你想用什么值来更新,既然返回多行,就说明子查询查出的结果部位,用来更新的值都不唯一怎么能更新呢。你需要想法子找出条件来查出唯一的数据,因为这样的数据才是你想要更新的,否则的话就算所有数据全都更新了,也是错误的更新。

第3个回答  2012-09-25
update A set A.b=(select B.c from B)因为AB表没有关系!所以用where会出错!
第4个回答  2012-09-17
Update A Set A.b=B.c From A,B Where A.a=B.a追问

嗯..但是会把A表的其他值清空....这不是我希望的事,有啥好办法没?

追答

其它值?是指A表的b列的其它值吗?如果是,那加上条件: And B.c''
Update A Set A.b=B.c From A,B Where A.a=B.a And B.c''

第5个回答  2012-09-24
update A set A.b=(select top 1 B.c from B where A.a=B.a)
相似回答