MySQL执行DELETE语句遇#1093错误:表cart同时为目标与数据源
MySQL 1093错误解决方案:删除购物车记录时避免同表子查询冲突
MySQL限制了DELETE/UPDATE操作的目标表不能同时作为子查询的直接数据源,这就是触发#1093错误的原因。以下是几种可行的解决方法:
方法一:通过JOIN操作删除
把子查询的结果作为临时表和原表关联,绕开同表引用的限制:DELETE c1 FROM `cart` c1 JOIN ( SELECT cart_id FROM `cart` WHERE cart_user_id = 1 AND cart_item_id = 1 LIMIT 1 ) c2 ON c1.cart_id = c2.cart_id;方法二:嵌套子查询生成临时表
把原有的子查询再嵌套一层,让MySQL自动生成临时表,这样外层查询引用的是临时表而非原表:DELETE FROM `cart` WHERE cart_id = ( SELECT cart_id FROM ( SELECT cart_id FROM `cart` WHERE cart_user_id = 1 AND cart_item_id = 1 LIMIT 1 ) AS temp );方法三:直接使用业务条件删除(推荐)
如果cart_user_id和cart_item_id的组合足以定位需要删除的记录,或者只需要删除符合条件的第一条记录,直接简化语句即可:DELETE FROM `cart` WHERE cart_user_id = 1 AND cart_item_id = 1 LIMIT 1;
内容的提问来源于stack exchange,提问作者Mohamed Anter
相关产品推荐
相关产品推荐

