有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value上面sql文字,sql2000报错为:子查询返回的值多于一个.当子查询跟随在 =、!=、= 之后,或子查询用
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/25 20:49:28
![有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value上面sql文字,sql2000报错为:子查询返回的值多于一个.当子查询跟随在 =、!=、= 之后,或子查询用](/uploads/image/z/9810818-26-8.jpg?t=%E6%9C%89%E4%B8%A4%E4%B8%AA%E8%A1%A8A+%E5%92%8CB+%2C%E5%9D%87%E6%9C%89key+%E5%92%8Cvalue+%E4%B8%A4%E4%B8%AA%E5%AD%97%E6%AE%B5%2C%E5%A6%82%E6%9E%9CB+%E7%9A%84key+%E5%9C%A8A+%E4%B8%AD%E4%B9%9F%E6%9C%89%2C%E5%B0%B1%E6%8A%8AB+%E7%9A%84value+%E6%8D%A2%E4%B8%BAA+%E4%B8%AD%E5%AF%B9%E5%BA%94%E7%9A%84value%E4%B8%8A%E9%9D%A2sql%E6%96%87%E5%AD%97%2Csql2000%E6%8A%A5%E9%94%99%E4%B8%BA%EF%BC%9A%E5%AD%90%E6%9F%A5%E8%AF%A2%E8%BF%94%E5%9B%9E%E7%9A%84%E5%80%BC%E5%A4%9A%E4%BA%8E%E4%B8%80%E4%B8%AA.%E5%BD%93%E5%AD%90%E6%9F%A5%E8%AF%A2%E8%B7%9F%E9%9A%8F%E5%9C%A8+%3D%E3%80%81%21%3D%E3%80%81%3D+%E4%B9%8B%E5%90%8E%2C%E6%88%96%E5%AD%90%E6%9F%A5%E8%AF%A2%E7%94%A8)
有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value上面sql文字,sql2000报错为:子查询返回的值多于一个.当子查询跟随在 =、!=、= 之后,或子查询用
有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value
上面sql文字,sql2000报错为:子查询返回的值多于一个.当子查询跟随在 =、!=、= 之后,或子查询用作表达式时,这种情况是不允许的.
语句已终止.该怎么写?
有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value上面sql文字,sql2000报错为:子查询返回的值多于一个.当子查询跟随在 =、!=、= 之后,或子查询用
报错原因是,某个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就可以执行成功了.