오라클 중복레코드삭제(ROWID, PK, ROWNUM, EXISTS, 조인, NOT IN이용)
오라클 테이블에서 중복레코드, 중복행을 제거하는 방법을 음성없이 영상으로 준비했습니다. 간단히 살펴보세요~ 오라클 중복레코드삭제(ROWID, PK, ROWNUM, EXISTS, 조인, NOT IN이용)

------------------------------------------------------------
-- 오라클에서 중복 레코드 삭제하는 방법
-- How to delete duplicate records in oracle table
------------------------------------------------------------
https://www.youtube.com/watch?v=HAN5QruWjxU&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=23&t=143s

-- 실습테이블 생성
drop table dup_test;
create table dup_test (
id number generated as identity, -- Primary Key
name varchar2(100),
city varchar2(100));
insert into dup_test (name, city) values ('가길동' , '서울');
insert into dup_test (name, city) values ('나길동' , '인천');
insert into dup_test (name, city) values ('다길동' , '대전');
insert into dup_test (name, city) values ('라길동' , '전주');
insert into dup_test (name, city) values ('바길동' , '부산');
insert into dup_test (name, city) values ('가길동' , '서울'); --중복
insert into dup_test (name, city) values ('나길동' , '인천'); --중복
commit;
select * from dup_test;
--1. 중복데이터 삭제 방법1(ROWID가 다르다는 것을 이용)
delete from dup_test a
where a.rowid > any (select b.rowid from dup_test b
where a.name = b.name
and a.city = b.city);
select * from dup_test;
rollback; -- 삭제취소
-- 2. 중복데이터 삭제 방법2(주키, Primary Key가 다르다는 것을 이용)
delete from dup_test a
where a.id > (select min(b.id) from dup_test b
where a.name = b.name
and a.city = b.city);
select * from dup_test;
rollback; -- 삭제취소
-- 3. 중복데이터 삭제 방법3(중복되는 데이터의 ROWNUM을 이용)
delete from dup_test a
where a.id in (select c.id
from (
select b.id, rownum rn
from dup_test b
where a.name = b.name
and a.city = b.city
) c
where c.rn > 1
);
select * from dup_test;
rollback; -- 삭제취소
--4. 중복데이터 삭제 방법4(EXISTS 이용)
delete from dup_test a
where EXISTS (select 1
from dup_test b
where a.name = b.name
and a.city = b.city
group by b.name, b.city
having min(b.id) != a.id);
select * from dup_test;
rollback; -- 삭제취소
--5. 중복데이터 삭제 방법4(JOIN을 이용)
delete from dup_test a
where a.id in
(
select b.id
from dup_test b
join dup_test c on
(
b.name = c.name
and b.city = c.city
and b.id > c.id
)
);
select * from dup_test;
rollback; -- 삭제취소
--6. 중복데이터 삭제 방법6(NOT IN을 이용)
delete from dup_test a
where (id, name, city) not in ( select min( id ), name, city
from dup_test
group by name, city );
select * from dup_test;
rollback; -- 삭제취소
#중복레코드삭제, #중복데이터삭제, #중복행삭제, #오라클동영상, #ORACLE동영상, #오라클교육, #ORACLE교육, #오라클강의, #오라클강좌, #오라클학원, #ORACLE학원, 중복레코드삭제, 중복데이터삭제, 중복행삭제, 오라클동영상, ORACLE동영상, 오라클교육, ORACLE교육, 오라클강의, 오라클강좌, 오라클학원, ORACLE학원
댓글 없음:
댓글 쓰기