两张表A、B,现在要把A表的a字段,全部更新到B表的b字段,两个表有共同字段C,请问这个update语句怎么写

我是这样写的,updateBsetb=(selectafromAwhereA.c=B.c);总是报单行子查询返回多行,请问这个怎么改??... 我是这样写的,update B set b=(select a from A where A.c=B.c); 总是报单行子查询返回多行,请问这个怎么改?? 展开
 我来答
海影幻
2016-06-02 · TA获得超过230个赞
知道小有建树答主
回答量:198
采纳率:75%
帮助的人:52万
展开全部
楼主这语句有bug,这种修改如果在B表中的数据在A表中没有就会把B表的这些数据改为空,若原来是空的还好,若不是空的就相当于把数据删除了,这是其一。根据你说的报查询返回多行来看,是出现了在a表中的c字段的值有重复,该更新为一对一更新所以他不知道你要更新为a表中那多个值的那个值,于是就报了那么一个错误,举例说明就是 如a.c有同一个值有两条记录,比如:小二:77(a:c)和 小三:77(a:c)这样他就不知道你是要把b中的b改为小二还是小三就报了那么一个错。
数据少的话可以关联查询出来(要保证一对一)然后将a的a复制到b的b那列,
多的话写存储过程,或者
update B set b=(select a from A where A.c=B.c)
where b.c in (select a.c from a)
--这个语句先测试,再操作,避免出现问题
--语句保证是1对1,通常加条件,在记录相同的情况下可以选择第一条,这个对应数据库有对应函数与方法实现
;
追问
还是报同样的错,B表里b字段没有值,我就是想通过两个表的共同的字段c,把A表的a字段全部更新到B表的b字段啊
追答
报这个错在oracle中,在多个关联值有多个且更新值也相同的情况下可以加个rownum =1就解决了,但考虑到可能关联的值有多个但更新的值确五花八门就要另寻条件了
唐城冬
2016-06-02 · 大家一起学习进步吧!!!
唐城冬
采纳数:915 获赞数:1815

向TA提问 私信TA
展开全部
update B set b=A.a from B inner join A on B.C=A.C
首先要保证A表的C字段是唯一的
更多追问追答
追问
命令未正确结束
追答
你是不是改过语句(在执行的时候),你最好把你执行的语句再贴出来
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
董晴涩
2016-06-02 · 超过19用户采纳过TA的回答
知道答主
回答量:69
采纳率:50%
帮助的人:29万
展开全部
这句话后面加where
追问
再加where???条件是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式