-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46566
- shell命令
-
- 文章:(42)篇
- 阅读:154239
- Git教程
-
- 文章:(36)篇
- 阅读:234850
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131794
-
MySQL中You can't specify target table '*' for update in FROM clause2018-12-18 18:23 阅读(4847) 评论(0)
一、问题描述
一条简单的sql如下,删除test表中 id 小于或等于3的数据。
DELETE FROM test WHERE id IN(SELECT id FROM `test` WHERE id <= 3);
执行后,报错如下:
Error Code: 1093
You can't specify target table 'test' for update in FROM clause
why?
因为在mysql中,如果子查询的 FROM 子句和更新、删除对象使用同一张表,会出现上述错误。
解决方案:
给FROM 子句中的结果集起别名
如下:
DELETE FROM test WHERE id IN(SELECT * FROM (SELECT id FROM `test` WHERE id <= 3) AS t);
二、备注
1、 DELETE FROM TABLE 这样的句子中 TABLE 不能使用别名
DELETE FROM test AS t WHERE id = 1;
需要改为如下:
DELETE FROM test WHERE id = 1;