MYSQL You can’t specify target table ‘表名’ for update in FROM clause 解决办法
原始SQL
这是我一开始使用的语句。
// An highlighted block
update table set sex = 2 where id in (select id from table)
报错后便上网查询,给出的结果都是这样的 ,也就是包一层 ,但是对于mysql5.7不好使(也许他们都用的8吧)
// An highlighted block
update table set sex = 2 where id in
(select id from (select id from table) t)
解决
无奈只得官网查询(解决办法的尽头还得是官网啊) MYSQL 文档
这是官网的截图
也就是放到select子查询,但是官网这里应该少了一层嵌套,我如下写仍然报错
update table,
(select id from table where id in (select * from table where sex = 1)) as t1
set sex = 2
where t1.id = table.id
再结合之前的理解,我在子查询上再加了一层嵌套
// 最终
update table,
(select * from (select id from table where id in (select * from table where sex = 1)) t) as t1
set sex = 2
where t1.id = table.id
这次终于正常执行了,记录下解决过程,希望能帮到更多有同样问题的小伙伴!如果有问题,欢迎评论区讨论!