对于Oracle来讲,可以用rowid去删除,保留最大或最小,如下:
DELETE from tablename WHERE (id) IN ( SELECT id FROM tablename GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM tablename GROUP BY id HAVING COUNT(*) > 1);
但是在MySQL中,上面的语句并不能使用,会报 for update的错,解决方法为 in 语句后面的查询结果要加封装
原因:mysql在同一个语句中不能先select一个表中的某些值,再update这个表
但是在Oracle 中无影响

本文介绍了如何在Oracle和MySQL数据库中处理重复记录的方法。针对Oracle数据库,可以通过ROWID来保留重复记录中的最大或最小值并删除其他重复项。而对于MySQL,则需采用不同的策略以避免在同一语句中先查询后更新同一表时出现的问题。
689

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



