温馨提示:本文最后更新于
2024-07-09 18:34:02
,某些文章具有时效性,若有错误或已失效,请在文末留言。在 Oracle 数据库中,查询重复数据是一项常见任务,尤其是在处理大量数据时。重复的数据可能有两种情况:第一种是表中只有某些字段一样,第二种是两行记录完全一样。
今天十一张(www.11zhang.com)分享一种 Oracle 中快速查询重复数据的方法,希望对您有所帮助。
假设,现在有一张卡交易表(表名:card_table),这张表有卡号、交易日期、交易时间、设备编号4个字段,如下图。
select card_id "卡号",
trans_date "交易日期",
trans_time "交易时间",
eqp_id "设备编号"
from card_table;
查询重复数据
若想将卡号、交易日期、交易时间、设备编号这4个字段完全相同的记录查询出来,我们可以据据 Oracle 自带的 rowid 属性来判断是否存在重复数据,语句如下:
select * from card_table a
where a.rowid != (select max(b.rowid)
from card_table b
where a.card_id = b.card_id
and a.trans_date = b.trans_date
and a.trans_time = b.trans_time
and a.eqp_id = b.eqp_id);
删除重复数据
同理,若想将卡号、交易日期、交易时间、设备编号这4个字段完全相同的重复数据删除(只保留一条数据),语句如下:
delete from card_table a
where a.rowid != (select max(b.rowid)
from card_table b
where a.card_id = b.card_id
and a.trans_date = b.trans_date
and a.trans_time = b.trans_time
and a.eqp_id = b.eqp_id);
commit;
查询非重复数据
我们也可以直接查询非重复数据(即不显示重复的数据),语句如下:
select a.*, rowid from card_table a
where rowid in
(select min(rowid) from card_table
group by card_id,trans_date,trans_time,eqp_id)
order by card_id asc;
✅来源:十一张博客
© 版权声明
●本站部分资源收集整理于互联网,仅供交流和学习使用,请于下载后24小时内删除
●版权归原作者和机构所有,严禁商用,否则产生的一切后果将由您自己承担
●如果您不喜欢本站有您信息的存在,请邮件告知我们予以删除
●版权归原作者和机构所有,严禁商用,否则产生的一切后果将由您自己承担
●如果您不喜欢本站有您信息的存在,请邮件告知我们予以删除
THE END
暂无评论内容