oracle查询不重复数据

本文介绍两种SQL查询去重的方法及三种删除重复记录的方法,并提供Oracle环境下处理数据锁定问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

select jqbh,cjdbh,sjybh,sjyxm

from (select t.jqbh,t.cjdbh,t.sjybh,t.sjyxm,row_number() OVER(PARTITION BY t.sjybh ORDER BY t.jqbh) ds from T_ITMP_TCS_DISPOSAL t
where t.sjyxm is not null)
where ds=1

 方法二:
select jqbh,cjdbh,sjybh,sjyxm
from T_ITMP_TCS_DISPOSAL

where cjdbh in(select min(cjdbh) from T_ITMP_TCS_DISPOSAL WHERE sjyxm is not null group by sjybh);


结果集:


参考:

--去重查询方法一:根据id

select * from sxe where id in(select min(id) from sxe group by username) order by id asc;

--去重查询方法二:根据rownum

select * from (select s.*,rownum rn from sxe s ) x where x.rn in (select min(rownum) from sxe group by username) order by id asc;

--去重查询方法三:根据rowid

select * from (select s.*,rowid rid from sxe s) x where x.rid in (select min(rowid) from sxe group by username) order by id asc;

select s.*,rowid from sxe s where rowid in (select min(rowid) from sxe group by username) order by id asc;

 

--去重删除方法一:根据ID

delete from sxe where id not in (select min(id) from sxe group by username);

--去重删除方法二:根据rownum

--delete from (select s.*,rownum from sxe s) x where rownum not in (select min(rownum) from sxe group by username);

--去重删除方法三:根据rowid

delete from sxe where rowid not in (select min(rowid) from sxe group by username);


备注:补充

oracle 进行数据增删改查一定要进行事务处理,7个事务处理。若发现数据无法进行更新操作,那么一定是没有进行事务处理。则解决方法为解锁oracle,方法如下:
SELECT object_name, machine, s.sid, s.serial#
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid;

alter system kill session 'sid, serial#';
ALTER system kill session '180, 60715';


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值