MySQL Error 1093及子查询多行问题求助:修改laptop_backup表Ram字段
解决laptop_backup表Ram字段去GB的更新错误
错误原因分析
- 第一个错误(Error Code: 1093):MySQL有明确限制,执行UPDATE操作时,不能在FROM子句中直接引用要更新的目标表,你第一次写的语句里子查询直接查询了
laptop_backup,触发了这个规则。 - 第二个错误(Subquery returns more than 1 row):你嵌套的子查询返回了整个表所有行的处理结果,是一个多行数据集,但
SET Ram需要给每一行的字段赋值单个值,因此触发了该报错。
正确的SQL语句
根本不需要嵌套子查询,直接在SET中对当前行的Ram字段应用REPLACE函数即可,UPDATE会自动逐行处理每条记录:
UPDATE laptop_backup SET Ram = REPLACE(Ram, 'GB', '');
如果你的Ram字段还存在其他非数字单位(比如MB),或者想确保只保留纯数字部分,可以使用正则替换(仅支持MySQL 8.0及以上版本):
UPDATE laptop_backup SET Ram = REGEXP_REPLACE(Ram, '[^0-9]', '');
内容的提问来源于stack exchange,提问作者Himadri
相关产品推荐
相关产品推荐

