You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行SQL UPDATE语句报1242错误(子查询返回多行)如何解决

错误原因
  • WHERE子句后直接放置了返回多行结果的子查询,没有搭配IN/EXISTS这类可处理多行结果的操作符:数据库执行WHERE条件时需要得到布尔值判断结果,但你的子查询返回了多个符合条件的商品ID,无法直接转换为布尔值,因此触发1242错误。
  • 存在隐性逻辑问题:子查询内部使用的product表和外层UPDATE的product表重名,会出现标识符作用域混淆问题,即使补全操作符也可能出现执行结果不符合预期的情况。
修复方案

以下两种写法均可以实现需求,可根据数据规模和性能偏好选择:

写法1:IN子查询(逻辑直观,适合小数据量场景)

UPDATE product
SET bio = 'bio-plant'
WHERE Id_Product IN (
    SELECT DISTINCT pha.Id_Product
    FROM product_has_additions pha
    WHERE pha.code IN ('E170', 'E220', 'E296', 'E300', 'E306', 'E322', 'E330', 'E333', 'E334', 'E335', 'E336', 'E341', 'E392', 'E400', 'E401', 'E402', 'E406', 'E407', 'E410', 'E412', 'E414', 'E415', 'E422', 'E440', 'E464')
);

说明:子查询不需要额外关联product表,直接从关联表取符合条件的商品ID即可,避免表重名问题。

写法2:EXISTS关联查询(性能更优,适合大数据量场景)

UPDATE product p
SET bio = 'bio-plant'
WHERE EXISTS (
    SELECT 1
    FROM product_has_additions pha
    WHERE pha.Id_Product = p.Id_Product
    AND pha.code IN ('E170', 'E220', 'E296', 'E300', 'E306', 'E322', 'E330', 'E333', 'E334', 'E335', 'E336', 'E341', 'E392', 'E400', 'E401', 'E402', 'E406', 'E407', 'E410', 'E412', 'E414', 'E415', 'E422', 'E440', 'E464')
);

内容的提问来源于stack exchange,提问作者yoggozuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 07:45:04