Mysql中You can’t specify target table ‘xxx’ for update in FROM clause的解决办法

作者: deepwinter 分类: 数据库 发布时间: 2020-03-25 09:52 点击量: 70 次阅读

问题描述

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不会出现此问题。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注