含义
You can’t specify target table for update in FROM clause:不能在同一表中查询的数据作为同一表的更新数据。
例子
update t_blog set views = ( select views from t_blog where id = ' 35' + 1 ) where id = ' 35'
这句语句是想要找出t_blog表中的views进行加1操作,在oracle语句中是支持直接这样查询的,但在mysql中却报了上面的错误,不能在同一表中查询的数据作为同一表的更新数据。
解决
UPDATE t_blog SET views = ( SELECT ub.views FROM ( SELECT (ua.views+1) views FROM t_blog ua WHERE ua.id = '35' ) ub ) WHERE id = '35'
也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。