Oracle 표 에서 중복 기록 을 찾 고 삭제 하 는 절차 방법
방법:group by XX having count(*)>1,rowid,distinct,temporary table,procedure
1.조회 표 의 중복 데이터 a.필드 반복
b.여러 필드 반복
c.줄 전체 반복
테스트 테이블 생 성:
create table cfa (businessid number,customer varchar2(50),branchcode varchar2(10),data_date varchar2(10));
insert into cfa values (1,'Albert','SCB','2011-11-11');
insert into cfa values (2,'Andy','DB','2011-11-12');
insert into cfa values (3,'Allen','HSBC','2011-11-13');
--------------- ----------------------------------------------
insert into cfa values (1,'Alex','ICBC','2011-11-14');
insert into cfa values (1,'Albert','CTBK','2011-11-15');
insert into cfa values (1,'Albert','SCB','2011-11-11');
a 의 경우 businessid 만 반복 합 니 다.
select * from cfa where businessid in (select businessid from cfa group by businessid having count(businessid)>1);
b 의 경우 businessid 와 name 이 중복 되 어 있 습 니 다
select * from cfa where (businessid,customer) in (select businessid,customer from cfa group by businessid,customer having count(*)>1);
c 의 경우 한 줄 을 반복 합 니 다.b 참조 방법:
select * from cfa where (businessid,customer,branchcode,data_date) in (select * from cfa group by businessid,customer,branchcode,data_date having count(*)>1);
2.표 에 있 는 중복 데이터 a 상황 을 삭제 하고 표 에 있 는 중복 기록 을 삭제 합 니 다.중복 기록 은 하나의 필드(businessid)에 따라 판단 되 고 rowid 의 최소 기록 만 남 습 니 다.또한 rowid 만 유지 할 수 있 습 니 다.최소 기록 이 아 닙 니 다.코드 에 있 는 min 을 max 로 바 꾸 어야 합 니 다.더 이상 군말 하지 않 습 니 다.
4.567913.또는 아래 의 더욱 간단 하고 효율 적 인 문 구 를 사용한다.
delete from cfa
where businessid in (select businessid
from cfa
group by businessid
having count(businessid) > 1)
and rowid not in (select min(rowid)
from cfa
group by businessid
having count(businessid) > 1);
b.경우,표 에 남아 있 는 중복 기록(여러 필드)을 삭제 하고 rowid 의 최소 기록 만 남 깁 니 다.
DELETE FROM cfa t
WHERE t.ROWID >
(SELECT MIN(X.ROWID) FROM cfa X WHERE X.businessid = t.businessid);
또는 아래 의 더 간단 하고 효율 적 인 문 구 를 사용한다.
delete from cfa
where (businessid,customer) in (select businessid,customer
from cfa
group by businessid,customer
having count(*) > 1)
and rowid not in (select min(rowid)
from cfa
group by businessid,customer
having count(*) > 1);
c 상황,이런 상황 은 비교적 간단 하 다.임시 표 방법 을 사용한다.
DELETE FROM cfa t
WHERE t.ROWID > (SELECT MIN(X.ROWID)
FROM cfa X
WHERE X.businessid = t.businessid
and x.customer = t.customer);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
html로 검색 표를 작성하다.html로 제작해 보세요. EC 사이트라면 BOX를 검색하는 것이 절대적으로 필요하기 때문에 여기서 제작 방법을 총괄한다.다만 이번에는 검색을 실제로 실행하지 않을 것이다.간단하게 html과 css로 검색 표를 만들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.