【问题描述】:
Error: 1093 SQLSTATE: HY000 (ER_UPDATE_TABLE_USED)
Message: You can't specify target table '%s' for update in FROM clause
-
mysql> SHOW ERRORS;
-
+-------+------+----------------------------------------------------------------------------------------+
-
| Level | Code | Message |
-
+-------+------+----------------------------------------------------------------------------------------+
-
| Error | 1093 | You can't specify target table 'table_name' for update in FROM clause |
-
+-------+------+----------------------------------------------------------------------------------------+
-
1 row in set (0.02 sec)
常见的一个ERROR,在UPDATE时会出现,故DELETE时也有可能出现该问题。
大致意思是,不能根据某张表里SELECT出来的条件去UPDATE(DELETE)。
比如如下语句:
-
DELETE FROM table_name
-
WHERE id IN
-
(SELECT id
-
FROM table_name
-
GROUP BY company_id
-
HAVING COUNT(1)>1);
【解决方案】:
先将SELECT出来的结果集放入临时表,再从临时表取出条件:
比如:
-
DELETE FROM table_name
-
WHERE id IN
-
(SELECT a.id from
-
(SELECT id
-
FROM table_name
-
GROUP BY company_id
-
HAVING COUNT(1)>1) a
-
);
作者公众号(持续更新)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1873900/
,如需转载,请注明出处,否则将追究法律责任。