mysql - 错误代码: 1093.您无法指定目标表

标签 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

请解决。

最佳答案

您不能在查询的其余部分中指定删除中使用的相同表。解决此问题的一种方法是使用 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 会具体化子查询。由于子查询的额外级别,编译器有点“忘记”它正在从修改的表 bing 中查询。

关于mysql - 错误代码: 1093.您无法指定目标表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206817/

相关文章:

mysql - 连接具有两个相同列的两个表

mysql - 选择时间之间,填写空时间

mysql - Django 一对多查询

php - 无法使用多个$mysqli->prepare将数据插入mysql

php - sql中加分号

mysql - Vagrant MySQL 访问

mysql - 选择 1 到多的更好方法?

php - laravel - 三个表的内连接查询

mysql - 如何从 SQL 行中的列中删除特定值?

mysql - 如何正确使用 NOT EXISTS for MySQL?