MySQL插入时出现‘Subquery returns more than 1 row’错误的解决咨询
问题原因与修复方案
原因
你执行的INSERT语句中,VALUES子句里的子查询(SELECT id AS sap_crf_id FROM wla_sap_crf WHERE so_num = 2147480943)返回了多条记录,但VALUES要求每个字段位置只能对应单个值,数据库无法将多行数据塞进单个字段,因此抛出“Subquery returns more than 1 row”错误。
本质是so_num = 2147480943这个查询条件在wla_sap_crf表中匹配到了多条数据,子查询无法返回唯一值来填充sap_crf_id字段。
修复方法
根据你的业务需求选择以下方案:
- 如果
so_num字段本应唯一:
先清理wla_sap_crf表中so_num=2147480943的重复记录,保留符合业务逻辑的那条,删除多余数据。之后给so_num添加唯一约束,防止后续再出现重复:ALTER TABLE wla_sap_crf ADD UNIQUE KEY uk_so_num (so_num); - 如果允许一个
bl_id对应多个sap_crf_id:
改用INSERT...SELECT语法批量插入,直接将子查询的所有结果批量写入目标表:INSERT INTO wla_crf_extend (bl_id, sap_crf_id) SELECT 4747, id FROM wla_sap_crf WHERE so_num = 2147480943; - 如果只需要子查询返回的某一条特定记录:
给子查询添加排序和限制条件,比如取id最大的记录(可根据业务调整排序字段):INSERT INTO wla_crf_extend (bl_id, sap_crf_id) VALUES (4747, (SELECT id FROM wla_sap_crf WHERE so_num = 2147480943 ORDER BY id DESC LIMIT 1));
内容的提问来源于stack exchange,提问作者Ratu Batu Hamlo Koto
相关产品推荐
相关产品推荐

