SQL更新语句出现Subquery returns more than 1 row嵌套CONCAT错误求助
解决UPDATE语句中Subquery returns more than 1 row错误
错误原因
报错的核心问题是你写的(select bar.number from bar)没有添加限定条件,执行时会返回bar表所有行的number值,导致子查询返回多行,无法和前面单个的west.west_id完成拼接。而之前只保留west部分能正常执行,是因为那个子查询通过bar.west_id = west.id关联到了当前更新的行,只会返回单个值。
推荐解决方案(JOIN方式)
用JOIN关联两张表,直接获取对应字段拼接,既简洁又高效,完全避免子查询的问题:
UPDATE bar JOIN west ON bar.west_id = west.id SET bar.bar_id = CONCAT(west.west_id, ':', bar.number)
备选方案(子查询修正)
如果一定要用子查询写法,需要给第二个子查询添加限定条件,确保只返回当前更新行的number值(假设bar表有主键id):
UPDATE bar SET bar.bar_id = CONCAT( (SELECT west.west_id FROM west WHERE bar.west_id = west.id), ':', (SELECT b.number FROM bar b WHERE b.id = bar.id) )
额外注意事项
- 确保
west表中bar.west_id = west.id的关联是一对一关系,如果是一对多,需要明确取哪一个west_id,比如用MAX(west.west_id)或MIN(west.west_id),根据业务需求处理。 - 执行更新前建议先验证结果:
SELECT CONCAT(west.west_id, ':', bar.number) AS new_bar_id FROM bar JOIN west ON bar.west_id = west.id
确认格式符合预期后再执行UPDATE操作。
内容的提问来源于stack exchange,提问作者TechJunkie
相关产品推荐
相关产品推荐

