oracle - 删除重复的数据(主键不同,保留主键最大的一个)
本文介绍了oracle - 删除重复的数据(主键不同,保留主键最大的一个)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
例如:id date num no name
1 2009-8-1 0002 015 张三
2 2009-8-1 0002 015 张三
3 2009-8-1 0002 015 张三
4 2016-7-6 0008 098 李四
需要删除id为1和2的重复记录,然后保留id为3(重复数据中id最大的那一个)的数据;
操作完成后 有id为3 和 4 的记录。
解决方案
DELETE FROM table WHERE id IN (
SELECT id FROM (SELECT id FROM table b WHERE (b.date, b.num, b.no) IN (SELECT date, num, no FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AND id NOT IN (SELECT max(id) FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AS tt)
我没测试,不确保上面的 sql
完全正确!
可以先把 DELETE
改成 SELECT *
看看查出来的数据符不符合要求,大概思路就是这个,用 HAVING
;
这篇关于oracle - 删除重复的数据(主键不同,保留主键最大的一个)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文