我写了这个查询
set sql_safe_updates=0;
delete from t1 where id < (select avg(id) from t1);
set sql_safe_updates=1;
但它出错了
Error Code: 1093. You can't specify target table 't1' for update in FROM clause
请解决。
答案 0 :(得分:0)
您无法在查询的其余部分中指定delete
中使用的同一个表。解决此问题的一种方法是使用join
:
delete t
from t1 t join
(select avg(id) as avgid
from t1
)
on id < (select avg(id);
这是MySQL的一个限制。另一种解决方法是使用额外级别的子查询:
delete from t1 where id < (select avgid from (select avg(id) as avgid from t1));
这样做的原因是因为MySQL将实现子查询。由于子查询的额外级别,编译器会“忘记”它从修改的表中查询。