错误代码:1093。您无法指定目标表

时间:2014-11-29 20:34:31

标签: mysql

我写了这个查询

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

请解决。

1 个答案:

答案 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将实现子查询。由于子查询的额外级别,编译器会“忘记”它从修改的表中查询。