MySQL删除最小sale_quantity商品时触发1093错误的解决求助
解决MySQL 1093错误:删除sale_quantity最小的商品
错误原因
MySQL不允许在DELETE/UPDATE语句的WHERE子句中,直接将目标更新表作为子查询的数据源,这会触发Error Code: 1093错误。
解决方案
提供两种可行的修改方案:
方案1:子查询嵌套临时表
把获取最小销量的子查询包装成临时表,避免直接引用目标表:
USE warehousingaquarium; SET SQL_SAFE_UPDATES = 0; -- 关闭安全更新模式,避免无主键删除报错 DELETE FROM product WHERE sale_quantity = ( SELECT min_sale FROM ( SELECT MIN(sale_quantity) AS min_sale FROM product ) AS temp_table );
方案2:JOIN关联删除
通过JOIN方式关联临时表实现删除:
USE warehousingaquarium; SET SQL_SAFE_UPDATES = 0; DELETE p FROM product p JOIN ( SELECT MIN(sale_quantity) AS min_sale FROM product ) AS temp_table ON p.sale_quantity = temp_table.min_sale;
额外说明
- 如果存在多个商品的
sale_quantity都是最小值,上述方案会删除所有符合条件的商品;若只需删除其中一个,可在语句末尾添加LIMIT 1。 SET SQL_SAFE_UPDATES = 0需放在DELETE之前执行,否则可能因未使用主键/唯一键作为删除条件触发安全限制报错。
内容的提问来源于stack exchange,提问作者AutumnWind
相关产品推荐
相关产品推荐

