현재상황 :
mber_id 와 vhcle_no 2개가 primary key 인데 누가 인덱스를 삭제해버려서
중복이 생겨버려서 중복된 것들을 제거한 후 인덱스를 만들려고 합니다.
질문 :
컬럼이 여러 개 있는 데 그중 두개의 컬럼값이 완전히 동일한 행들을 찾아내고 싶습니다.
그 두개의 컬럼은 mber_id 와 vhcle_no 컬럼입니다. 테이블명은 vhcle_info_tbl 입니다.
예를 들어 다른컬럼값들은 같거나 달라도 상관없는데, mber_id 가 a 이고 vhcle_no 가 1 인 행이
2개 이상 있다면 그런 mber_id 와 vhcle_no 를 select 문으로 출력하고 싶습니다.
mber_id vhcle_no delete_at
a 1 0
a 1 1
a 2 0
b 1 0
위의 예제에서 mber_id 가 a 이고 vhcle_no 가 1 인 것이 2개 있지요? 바로 그 행들의 mber_id 와 vhcle_no 를
찾아내고 싶은겁니다. 방법이 있을까요?
-- mber_id, vhcle_no 기준으로 중복인 데이터만 보기 select * from ( select * , ROW_NUMBER () OVER (PARTITION BY mber_id, vhcle_no ORDER BY rownum) rn from vhcle_info_tbl ) where rn = 2 ; -- mber_id, vhcle_no 기준으로 중복제거하여 하나만 보기 select * from ( select * , ROW_NUMBER () OVER (PARTITION BY mber_id, vhcle_no ORDER BY rownum) rn from vhcle_info_tbl ) where rn = 1 ; -- mber_id, vhcle_no 기준으로 중복인 데이터만 삭제하기 (1로우만 남기기) delete vhcle_info_tbl where rowid in (select rowid from ( select rowid , ROW_NUMBER () OVER (PARTITION BY mber_id, vhcle_no ORDER BY rownum) rn from vhcle_info_tbl ) where rn > 1 ) ;