내용 : 두개의 컬럼이 동시 중복되는 레코드를 찾아서 하나만 남기고 모두 삭제하기

drop table mydb_tbl

create table mydb_tbl
( idx int identity not null
, code char(1) not null
, name varchar(10) not null
)

insert into mydb_tbl (code, name) values('A', '홍길동') 
insert into mydb_tbl (code, name) values('B', '홍길동') 
insert into mydb_tbl (code, name) values('C', '홍길동') 
insert into mydb_tbl (code, name) values('A', '이순신') 
insert into mydb_tbl (code, name) values('C', '이상아') 
insert into mydb_tbl (code, name) values('B', '홍길동') 
insert into mydb_tbl (code, name) values('A', '홍길동') 
insert into mydb_tbl (code, name) values('C', '이상아') 

--입력되어 있는 자료 확인
select idx, code, name from mydb_tbl
order by code, name

idx         code name       
----------- ---- ---------- 
4           A    이순신
1           A    홍길동
7           A    홍길동
6           B    홍길동
2           B    홍길동
5           C    이상아
8           C    이상아
3           C    홍길동

(8 row(s) affected)


--셀프조인으로 확인해보면
select * from mydb_tbl a, mydb_tbl b
where a.code = b.code and a.name = b.name
order by a.code, a.name

idx         code name       idx         code name       
----------- ---- ---------- ----------- ---- ---------- 
4           A    이순신        4           A    이순신
1           A    홍길동        1           A    홍길동
7           A    홍길동        1           A    홍길동
1           A    홍길동        7           A    홍길동
7           A    홍길동        7           A    홍길동
2           B    홍길동        6           B    홍길동
6           B    홍길동        6           B    홍길동
2           B    홍길동        2           B    홍길동
6           B    홍길동        2           B    홍길동
5           C    이상아        5           C    이상아
8           C    이상아        5           C    이상아
5           C    이상아        8           C    이상아
8           C    이상아        8           C    이상아
3           C    홍길동        3           C    홍길동

(14 row(s) affected)


-- 중복되는 데이타로 삭제되어야 할 데이타들
select * from mydb_tbl a, mydb_tbl b
where a.code = b.code and a.name = b.name and a.idx < b.idx 
order by a.code, a.name

idx         code name       idx         code name       
----------- ---- ---------- ----------- ---- ---------- 
1           A    홍길동        7           A    홍길동
2           B    홍길동        6           B    홍길동
5           C    이상아        8           C    이상아

(3 row(s) affected)


-- 요고 한문장 이면 된다.
delete from mydb_tbl 
where idx in (select a.idx from mydb_tbl a, mydb_tbl b
where a.code = b.code and a.name = b.name and a.idx < b.idx )


--결과 확인
select idx, code, name from mydb_tbl 
order by code, name 

idx         code name       
----------- ---- ---------- 
4           A    이순신
7           A    홍길동
6           B    홍길동
8           C    이상아
3           C    홍길동

(5 row(s) affected)