MySQL使用WITH子句执行UPDATE报1054未知列错误问题求助
报错诱因
你定义的公共表表达式(CTE)updateables 属于独立的临时结果集,当前UPDATE语句仅指定了product单表作为操作对象,没有将updateables和product表建立关联关系,因此数据库在执行WHERE条件判断时无法识别updateables相关的字段,抛出1054未知列错误。
调整方案
支持CTE的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)可以直接在UPDATE子句中关联CTE实现需求:
WITH updateables AS ( SELECT id_product, quantity FROM products_order WHERE id_order = 1239 AND state = 10 ) UPDATE product INNER JOIN updateables ON product.id_product = updateables.id_product SET product.stock = updateables.quantity;
如果使用的是不支持CTE关联更新的低版本MySQL,也可以直接关联原始业务表实现等价逻辑:
UPDATE product p INNER JOIN products_order po ON p.id_product = po.id_product SET p.stock = po.quantity WHERE po.id_order = 1239 AND po.state = 10;
内容的提问来源于stack exchange,提问作者Agustín Rabini
相关产品推荐
相关产品推荐

