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


    1、执行sql语句报上面的错误:

    1 DELETE 
    2 FROM
    3     db_student 
    4 WHERE
    5     RowGuid IN ( SELECT RowGuid FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 ) 
    6     AND ID NOT IN ( SELECT MAX( ID ) AS id FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 )

    报错如下所示
    You can't specify target table 'xxx' for update in FROM clause。

    原因:因为在MYSQL里,不能先select一个表的记录,在按此条件进行更新和删除同一个表的记录。

    详细参考:https://blog.csdn.net/h996666/article/details/81699255

     1 SELECT *
     2 FROM
     3     db_student 
     4 WHERE
     5     RowGuid IN (
     6 SELECT
     7     aa.RowGuid 
     8 FROM
     9     ( SELECT RowGuid FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 ) aa 
    10     ) 
    11     AND ID NOT IN (
    12 SELECT
    13     t.id 
    14 FROM
    15     ( SELECT MAX( ID ) as id FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 ) t 
    16     )
    17     
    18 
    19 DELETE 
    20 FROM
    21     db_student 
    22 WHERE
    23     RowGuid IN (
    24 SELECT
    25     aa.RowGuid 
    26 FROM
    27     ( SELECT RowGuid FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 ) aa 
    28     ) 
    29     AND ID NOT IN (
    30 SELECT
    31     t.id 
    32 FROM
    33     ( SELECT MAX( ID ) as id FROM db_student WHERE age = 22 GROUP BY RowGuid HAVING count( * ) > 1 ) t 
    34     )

    待续......

  • 相关阅读:
    集合框架整理及之间的区别
    ArrayList和LinkedList
    GC(Garbage Collection)
    Java常用工具类
    Java异常处理
    JDK环境配置
    内部类总结
    Java字符串定义及常用方法
    Java面向对象总结
    Java数组定义及方法
  • 原文地址:https://www.cnblogs.com/biehongli/p/10851183.html
Copyright © 2020-2023  润新知