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

OpenCart数据库执行UPDATE SQL查询时报错#1242问题求助

报错原因

你遇到的#1242 - Subquery returns more than 1 row错误,核心是赋值用的子查询对单个oc_order记录匹配到了多条oc_order_history记录:
OpenCart的oc_order_history表是订单状态变更流水表,同一个订单多次变更到order_status_id=5的状态是常见场景,子查询返回多条结果时,数据库无法确定用哪条记录的date_added赋值,因此抛出错误。

修复方案

根据你的业务需求选择对应方案即可:

  • 取订单第一次进入状态5的时间,用MIN()聚合子查询结果:
UPDATE oc_order AS o 
SET o.date_added = ( SELECT MIN(date_added) FROM oc_order_history 
                    WHERE order_id = o.order_id 
                    AND order_status_id = 5)
  • 取订单最后一次进入状态5的时间,用MAX()聚合子查询结果:
UPDATE oc_order AS o 
SET o.date_added = ( SELECT MAX(date_added) FROM oc_order_history 
                    WHERE order_id = o.order_id 
                    AND order_status_id = 5)
  • 仅需任意一条匹配记录的时间,给子查询加返回行数限制:
UPDATE oc_order AS o 
SET o.date_added = ( SELECT date_added FROM oc_order_history 
                    WHERE order_id = o.order_id 
                    AND order_status_id = 5
                    LIMIT 1)

如果需要避免没有匹配到状态5记录的订单date_added被更新为NULL,可以额外加EXISTS过滤条件,示例如下:

UPDATE oc_order AS o 
SET o.date_added = ( SELECT MAX(date_added) FROM oc_order_history 
                    WHERE order_id = o.order_id 
                    AND order_status_id = 5)
WHERE EXISTS (SELECT 1 FROM oc_order_history 
              WHERE order_id = o.order_id 
              AND order_status_id = 5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:27:02