MySQL delete嵌套子查询问题

北战南征 提交于 2019-12-06 16:09:40

有这样一个例子:

删除除了编号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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!