zoukankan      html  css  js  c++  java
  • MySQL delete嵌套子查询问题

    有这样一个例子:

    删除除了编号id不同, 其他都相同的学生冗余信息。

    感觉很简单,先按照除了编号以外的字段分组,查询出结果,然后删除id不在查询结果中的数据。

    sql语句就是这样:

    DELETE FROM table2 WHERE id NOT IN (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID)

    但是结果会报错:You can't specify target table 'table2' for update in FROM clause

    报错原因是因为不能先从同一张表中查出数据,然后再在同一张表中进行update操作。

    可以通过建一张临时表来解决这个问题。

    SELECT tmp.id FROM (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID) tmp

    然后删除id不在这张临时表中的数据。最后的sql语句就是这样:

    DELETE FROM table2 WHERE id NOT IN (SELECT tmp.id FROM (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID) tmp)

  • 相关阅读:
    SQLServer 可疑
    String与Long互转
    洛谷 P5644
    洛谷 P3783
    洛谷 P4663
    洛谷 P3438
    Atcoder Grand Contest 054 题解
    迭代器失效问题
    Solution -「CF 232E」Quick Tortoise
    Solution -「NOI 2020」「洛谷 P6776」超现实树
  • 原文地址:https://www.cnblogs.com/w998/p/11993366.html
Copyright © 2011-2022 走看看