错误信息
[Err] 1093 - You can't specify target table 't_order' for update in FROM clause
错误背景
使用子查询的结果集作为删除语句的过滤条件来删除数据,如下:
DELETE from t_order where data_id in (
SELECT data_id from t_order where create_time <='2023-02-28 11:27:21'
)
错误分析
从报错的提示来看,意思是不能对同一张表同时使用select和删改语句,错误的原因是MySQL不允许在UPDATE/DELETE语句中直接通过子查询引用正在操作的目标表。
解决方案
使用临时表将子查询的结果集当成一张临时表,如下
DELETE from t_order where data_id in (
SELECT data_id from (
SELECT data_id from t_order where create_time <='2023-02-28 11:27:21'
)tmp
)
其他方案,使用使用JOIN改写、嵌套子查询等,在此省略。
1455

被折叠的 条评论
为什么被折叠?



