触发器引发Unknown column in 'field list'(errno1054)问题求助
问题解决方案
第一个触发器错误原因
子查询仅从Food表查询,未关联OrderItems表,因此无法识别OrderItems.quantity字段,这就是报错Unknown column in 'field list'的根源。
第二个触发器局限性
仅使用当前插入行的NEW.quantity和对应food_time计算,未累加当前订单下所有OrderItems的总和,因此只能计算单行数据的结果。
正确的触发器实现
要实现计算整个订单所有商品的总queue_time,需要关联OrderItems和Food表,汇总当前订单下所有条目的food_time * quantity总和:
BEGIN UPDATE Orders SET queue_time = COALESCE( ( SELECT SUM(f.food_time * oi.quantity) FROM OrderItems oi INNER JOIN Food f ON oi.food_id = f.food_id WHERE oi.order_id = NEW.order_id ), 0 ) WHERE Orders.order_id = NEW.order_id; END;
代码说明
- 通过
INNER JOIN关联OrderItems(别名oi)和Food(别名f),匹配商品ID; - 筛选条件
oi.order_id = NEW.order_id确保只计算当前订单的所有商品; - 使用
COALESCE函数处理订单无商品的情况,避免queue_time变为NULL,默认设为0; - 该触发器适用于
INSERT/UPDATE/DELETE操作,只要订单的商品条目变化,都会重新计算总queue_time。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

