有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value

上面sql文字,sql2000报错为:子查询返回的值多于一个。当子查询跟随在=、!=、<、<=、>、>=之后,或子查询用作表达式时,这种情况是不允许的。语句已终止。该怎么... 上面sql文字,sql2000报错为:子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。该怎么写?
展开
 我来答
king_java
2011-04-25 · TA获得超过364个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:171万
展开全部
报错原因是,某个B表中的key值,在A表中存在多个;
举个例子:B表中某条记录的key值为20,而A表中key值为20的记录存在两个以上就会报这个错误;
解决方案:
如果不考虑sql所在业务环境,只从技术上绕过这个报错,可以在多条记录中选取最大的一条或者最小的一条;
update B b set b.value=(select max(a.value) from A a where b.key=a.key)
where exists(select 1 from A c where b.key=c.key)

结合业务考虑,一般系统中设计了字段名为key,是不允许重复的,请楼主检查一下是否存在错误数据或垃圾数据,如果业务要求不允许重复,则添加一个唯一约束,然后正常简单的update就可以执行成功了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式