MySQL错误:You can't specify target table 'tablename' for update in FROM clause

有道翻译过来的原话是:你不能在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
                   )

注意:把结果集当成一张表查询的时候,需要把结果集用小括号扩住,同时需要给这个结果集取个别名!

你可能感兴趣的:(MySQL)