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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails에서 검색 기능을 직접 구현하는 방법이번에는 gm를 사용하지 않고 간단한 검색 기능을 만드는 방법을 적겠습니다. mysql 5.7.22 docker에서 mysql 양식에 검색 키워드(문자열) 입력 창의 검색 키워드(문자열)를 매개 변수로 컨트롤러 → ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.