mysql报错解决
我在操作mysql update语句时
UPDATE t_frame SET t_frame.`is_use` =0 WHERE frame_id IN(SELECT frame_id FROM `t_frame` WHERE enterprise_id = "11076");
出现如下错误:
You can't specify target table 't_frame' for update in FROM clause
最后经过排查发现:
如果你正在做一个UPDATE
/ INSERT
/DELETE
操作时,不能引用内部查询表(您可以但是从外部表引用一个字段...)
解决方案是在t_frame
中将子查询中的实例替换为SELECT B.* FROM (SELECT frame_id FROM
t_frame WHERE enterprise_id = "11076")AS B
,也就是说把它的查询结果作为另一个select的值,形成别名,然后再进行查询:如下所示
UPDATE t_frame SET t_frame.`is_use` =0 WHERE frame_id IN(SELECT B.* FROM (SELECT frame_id FROM `t_frame` WHERE enterprise_id = "11076")AS B);