• update mysql row (You can't specify target table 'x' for update in FROM clause)


    sql语句(update/delete都会出现此问题)

    update x set available_material_id = null where id not in (select id from x where additional_info = 1);
    
    

    mistake

    大致意思是,在同一语句中,不能先select出同一表中的某些值,再update这个表。

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

    mysql5.7解决办法

    update x left join
           x xx
           on x.id = xx.id and xx.additional_info = 1
        set available_material_id = null
        where xx.id is null;
    

    老办法(有人说5.7已经不能用了)

    原始:

    DELETE FROM tempA WHERE tid IN (
    SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age
    )
    

    改造后

    DELETE FROM tempA WHERE tid NOT IN (
    SELECT t.tid FROM (
    SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age
    ) t
    )
    

    查询的时候增加一层中间表,就可以避免该错误。

    参考

    https://stackoverflow.com/questions/51087937/on-update-mysql-row-you-cant-specify-target-table-x-for-update-in-from-claus
    https://blog.csdn.net/h996666/article/details/81699255
    https://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-clause/14302701  
    https://www.cnblogs.com/pcheng/p/4950383.html  
    https://blog.csdn.net/poetssociety/article/details/82391523
    
  • 相关阅读:
    静态INCLUDE与动态INCLUDE的区别
    SQL注入
    SpringMVC
    设计模式—七大原则
    Demo小细节-2
    Java运算符
    Java内部类的基本解析
    接口类和抽象类
    Statement和PreparedStatement
    ArrayList,LinkedLIst,HashMap
  • 原文地址:https://www.cnblogs.com/eternityz/p/12243362.html
Copyright © 2020-2023  润新知