今天写了一个sql语句,功能是删除一个表中指定字段有重复的数据:
DELETE FROM test WHERE id IN (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1)
提示错误:
You can't specify target table 'test' for update in FROM clause
网上查了下原因:mysql中不能先select出同一表中的某些值,再update这个表(在同一语句中)
其实小小的修改一下就能实现这样的功能,修改后sql语句:
DELETE FROM test WHERE id IN (SELECT a.id FROM (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1) AS a)
DELETE FROM test WHERE id IN (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1)
提示错误:
You can't specify target table 'test' for update in FROM clause
网上查了下原因:mysql中不能先select出同一表中的某些值,再update这个表(在同一语句中)
其实小小的修改一下就能实现这样的功能,修改后sql语句:
DELETE FROM test WHERE id IN (SELECT a.id FROM (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1) AS a)
本文讨论了在MySQL中删除表中指定字段重复数据时遇到的一个常见错误,并提供了解决方案。通过使用子查询来实现目标功能,避免了直接在同一个SQL语句中同时进行SELECT和UPDATE操作导致的语法冲突。
437

被折叠的 条评论
为什么被折叠?



