update mysql row (You can't specify target table 'x' for update in FROM clause)

Posted 未月廿三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了update mysql row (You can't specify target table 'x' for update in FROM clause)相关的知识,希望对你有一定的参考价值。

sql语句(update/delete都会出现此问题)

update x set available_material_id = null where id not in (select id from x where additional_info = 1);

mistake

大致意思是,在同一语句中,不能先select出同一表中的某些值,再update这个表。

You can\'t specify target table \'x\' for update in FROM clause

mysql5.7解决办法

update x left join
       x xx
       on x.id = xx.id and xx.additional_info = 1
    set available_material_id = null
    where xx.id is null;

老办法(有人说5.7已经不能用了)

原始:

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
)

查询的时候增加一层中间表,就可以避免该错误。

参考

https://stackoverflow.com/questions/51087937/on-update-mysql-row-you-cant-specify-target-table-x-for-update-in-from-claus
https://blog.csdn.net/h996666/article/details/81699255
https://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-clause/14302701  
https://www.cnblogs.com/pcheng/p/4950383.html  
https://blog.csdn.net/poetssociety/article/details/82391523

以上是关于update mysql row (You can't specify target table 'x' for update in FROM clause)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之You can't specify target table for update FROM clause解决办法

mysql中You can't specify target table for update in FROM clause

mysql You can't specify target table for update in FROM clause解决方法

mysql中You can't specify target table for update in FROM clause错误

mysql error:You can't specify target table for update in FROM clause

MySQL中You can't specify target table for update in FROM clause一场