zoukankan      html  css  js  c++  java
  • Mysql中如何解决You can't specify target table '表名' for update in FROM clause报错

    我们在MySQL中编写SQL语句时,可能会遇到如下错误:

    [Err] 1093 - You can't specify target table '表名' for update in FROM clause
    

    问题原因

    例如下面这个SQL,其在执行时就会出现以上报错:

    UPDATE users
    SET sex = 1
    WHERE id IN (
    SELECT id FROM users 
    WHERE realname = "小白" AND id > 2);
    

    为什么会出现这个错误呢?这是因为在MySQL使用时,在同一条SQL语句中,不允许先SELECT出同一个表的某些值,再对该表进行UPDATE操作。

    解决办法

    方法一

    为解决上面的问题,我们可以在SELECT时多嵌套一层子查询,即把SELECT出来的结果作为中间表再SELECT一次,修改后的SQL如下:

    UPDATE users
    SET sex = 1
    WHERE id IN (
    SELECT t.id FROM (
    SELECT id FROM users 
    WHERE realname = "小白" AND id > 2) t);
    

    方法二

    我们还可以创建一个新的临时表,然后根据临时表来UPDATE主表中的数据,最后再把临时表删除即可。

    CREATE TABLE user_tmp AS SELECT id FROM users WHERE realname = "小白" AND id > 2;
    
    UPDATE users SET sex = 1 WHERE id IN (SELECT id FROM user_tmp);
    
    DROP TABLE user_tmp;
    
    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    oracle10g安装问题
    oracle10g卸载问题
    c编译过程
    根文件系统制作
    Handler消息传递机制
    Glide图片加载库的使用
    关于FragmentPageAdapter
    Android中set标签的使用
    overridependingtransition方法
    关于View
  • 原文地址:https://www.cnblogs.com/wintest/p/15058261.html
Copyright © 2011-2022 走看看