MySQL 在子查询中删除

标签 mysql subquery

问题很简单,删除中重复的行

所以如果表是:

| id | name |
| 1  | aaaaa    |
| 2  | bbbbb    |
| 3  | aaaaa    |

输出结果将是:

| id | name |
| 1  | aaaaa    |
| 2  | bbbbb    |

这是我正在使用的查询:

delete t1 
  from Table t1
     , Table t2 
 where t1.name = t2.name 
   and t1.Id > t2.Id

上面的查询工作正常。

不过,我稍微修改一下查询:

delete 
  from Table 
 where Id in (select t1.Id from Table t1, Table t2 where t1.name = t2.name and t1.Id > t2.Id)

执行时,报错信息为“Error Code: 1093. You can't specify target table 'table' for update in FROM clause”

我的问题是为什么这个子查询不能正确执行?幕后故事是什么

提前致谢。

最佳答案

因为选择表会在记录上设置读取锁定,然后您将尝试更改这些记录。

关于MySQL 在子查询中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48958306/

相关文章:

mysql - 根据连接表的结果更新 MySQL 表

mysql - 操作数在 mysql 中应该有 1 列

mysql - 对多个表进行子查询的 SUM GROUP BY

mysql - mysql中的内连接中的子选择仅得到一个结果

mysql - 参数 sql false

mysql - python3 mysql 连接保持事件状态多长时间?

MySql INNER JOIN 查询问题

php - mysql查询返回 bool 值但我希望返回id

mysql - Node 脚本查询时数据库中的日期不匹配

mysql - 进入数据库需要特别注意的符号有哪些