MySQL中You can't specify target table 'fangyuan' for update in FROM clause完美解决
问题分析
在MySQL语句中,遇到You can’t specify target table ‘fangyuan’ for update in FROM clause错误,这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题。其实翻译过来差不多意思就是在同一语句中,select出同一表中的某些值,再update这个表或者字段,从而引发的错误。
解决方法:
将SELECT出的结果再通过中间表SELECT一遍
例如
会报You can’t specify target table ‘fangyuan’ for update in FROM clause错误
DELETE FROM tempA WHERE tid IN (
SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age
)
解决:
DELETE FROM tempA WHERE tid NOT IN (
SELECT t.tid FROM (
SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age
) t
)
报错案例
分析SQL语句:通过子查询的结果字段作为update的条件时报错,如下图:
将子查询结果单独运行后交给where条件语句时,修改成功!没有错,问题就出现在子查询以及update的操作上
解决:将SELECT出的结果再通过中间表SELECT一遍,如下图