MySQLdelete嵌套⼦查询问题
有这样⼀个例⼦:
删除除了编号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语句就是这样:
mysql中delete语句DELETE FROM table2 WHERE id NOT IN (SELECT tmp.id FROM (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID) tmp)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论