oracle怎么去重,oracle去重的5种方法
一、Oracle数据库去重
1、环境准备
可以看到“ALLEN”和“SMITH”这两个人的数据重复了,现在要求表中name重复的数据只保留一行,其他的删除。
CREATE TABLE hwb( id int, name varchar(10) );INSERT INTO hwb VALUES(1, 'TOM');INSERT INTO hwb VALUES(2, 'ALLEN');INSERT INTO hwb VALUES(3, 'ALLEN');INSERT INTO hwb VALUES(4, 'SMITH');INSERT INTO hwb VALUES(5, 'SMITH');INSERT INTO hwb VALUES(6, 'SMITH');commit;SELECT * FROM hwb;
2、实现方法一:通过分组后,拿最小的id重复删除
delete from hwb a where a.id in (select min(id) FROM hwb a group by name having count(name) > 1)
3、实现方法二:通过name相同,id不同的方式来判断
DELETE FROM hwb a WHERE EXISTS (SELECT 1 FROM hwb b WHERE a.name = b.name AND a.id > b.id);
4、实现方法三:用rowid代替id,替换删除
DELETE FROM hwb a WHERE EXISTS (SELECT 1 FROM hwb b WHERE a.name = b.name AND a.rowid > b.rowid);
5、实现方法四:通过分析函数根据name分组生成序号,然后删除序号大于1的数据。
语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
DELETE FROM hwb aWHERE ROWID IN (SELECT rid FROM (SELECT ROWID as rid, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) AS seq FROM hwb) WHERE seq > 1);
6、【推荐】实现方法五:根据rowid删除
DELETE FROM hwb a WHERE a.ROWID > (SELECT MIN(b.ROWID) FROM hwb b WHERE a.name = b.name);
本文地址:百科问答频道 https://www.neebe.cn/wenda/886511.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!