有道翻译过来的原话是:你不能在FROM子句中指定目标表'tablename'。
MySQL这种机制就是要更新一个表的记录时,那么更新值、更新条件都不能从这张表中取。如以下代码:
update users
set age = 22
where age > (select age
from users
where username = 'jsk')
这时就会报标题上的错误,因为age条件的值是从同一张表
users中取的值。
解决办法很简单,把from查询出的结果当成一张表,再查一次就好了。
正确代码:
update users
set age = 22
where age > (select age
from (select age
from users
where username = 'jsk') t
)
注意:把结果集当成一张表查询的时候,需要把结果集用小括号扩住,同时需要给这个结果集取个别名!