Mysql中You can’t specify target table ‘xxx’ for update in FROM clause的解决办法
问题描述
MySQL中You can't specify target table for update in FROM clause
错误的意思是说,不能先select
出同一表中的某些值,再update
这个表(在同一语句中)。
例如下面这个sql:
UPDATE t_sys_login_log SET logout_time = NOW()
WHERE log_id IN (SELECT MAX(log_id) FROM t_sys_login_log)
解决方案
改写成下面就行了:
UPDATE t_sys_login_log SET logout_time = NOW()
WHERE log_id IN (SELECT a.log_id FROM (SELECT MAX(log_id) AS log_id FROM t_sys_login_log) a)
也就是说将select
出的结果再通过中间表select
一遍,这样就规避了错误。注意,这个问题只出现于Mysql,Mssql和Oracle不会出现此问题。