zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Cookie和Session知识扫盲
    Nmap扫描原理与用法
    物理cpu与逻辑cpu的理解
    shell常用命令ping
    shell如何获取本地ip
    数据库52条SQL语句性能优化
    Linux Shell查看物理CPU个数、核数、逻辑CPU个数
    cf1225D Power Products cf1471D. Strange Definition
    cf 1389 E. Calendar Ambiguity
    cf 1420 D. Rescue Nibel!
  • 原文地址:https://www.cnblogs.com/eternityz/p/12243362.html
Copyright © 2011-2022 走看看