You can't specify target table 'unaudited_combo_merchandise_details' for update in FROM clause

错误表现

1
update unaudited_combo_merchandise_details set is_main = 1 where id in (select id from unaudited_combo_merchandise_details group by `relation_key`)

以上sql语句大致就是在同一张表里根据条件查询结果,然后在根据结果修改同一张表里的数据,那么在执行上面的语句的时候就会报这么一个错误:
You can't specify target table 'unaudited_combo_merchandise_details' for update in FROM clause,翻译过来大概就是:不能指定目标表’unaudited_combo_merchandise_details’
更新FROM子句;

问题解决

将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误。

1
2
3
4
update unaudited_combo_merchandise_details set is_main = 1 where id in  
(select a.id from
(select id from unaudited_combo_merchandise_details group by `relation_key`) a
)

需要注意的是,MSSQL和Oracle不会出现此问题。

谢翔 wechat
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------
0%