报错原因是,某个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就可以执行成功了。