#1093 - You can't specify target table 'user' for update in FROM clause

来源:互联网 发布:我知谁掌管明天视频 编辑:程序博客网 时间:2024/05/16 14:59

报出“1093 - You can't specify target table 't' for update in FROM clause”的异常。意思,意思大约为,你不能指定更新的目标表在FROM子句中(英文不好,即使认识各个单词,串起来就不行了。。。)

就如文档所述“Currently, you cannot update a table and select from the same table in a subquery.”,见http://dev.mysql.com/doc/refman/5.5/en/update.html。

不知道MySQL为什么不允许这样操作,猜,可能是担心更新的表与查询的表为同一表会存在嵌套递归?还是担心效率的问题呢?

 原代码:

DELETE from `user` where id not in (select MAX(id) from `user` group by telephone HAVING COUNT(telephone)>=1 ORDER BY NULL)


如果,将该表在嵌套一层,即“(select * from t_area) st”这样得出一个临时的结果集,即无报错,但,这性能较差,仅仅适合较小的数据量的。(见此讨论帖:http://stackoverflow.com/questions/17742214/you-cant-specify-target-table-name-for-update-in-from-clause)。

修改后如下:

DELETE    FROM         `user`    WHERE         id    NOT IN         (SELECT mid from (select MAX(id) as mid  from `user` group by telephone HAVING COUNT(telephone)>=1 ORDER BY NULL) as temtable);



分析:先把要删除的目标放到一张临时表再把要删除的条件指定到这张临时表即可。

0 0