-
[Oracle] SQL문으로 중복 데이터 삭제하기DataBase/Oracle 2018. 9. 21. 11:49
오라클에서 기존 테이블에 pk를 설정해주고 싶은데 중복 데이터가 있을 경우, violate가 뜬다. 중복 데이터를 없애야 pk 생성이 가능해진다.
금방 방법을 찾을 수 있었고, 종종 써야할 거 같아 출처를 밝히고 정리!
(혹시 나중에 블로그를 없애시면 글도 사라지니까)
총 방법이 3가지가 있었는데,
첫 번째,
12345678910111213DELETE FROM chocolate_table(테이블명)WHERE ROWID IN (SELECT ROWIDFROM (SELECT *FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명) AS numFROM chocolate_table(같은 테이블 명))WHERE num > 1 -- num의 값이 1초과인 데이터들만 삭제));cs 두 번째, 중복된 데이터들 중 나중에 등록된 데이터만 삭제하기
1234DELETE FROM 테이블명 aWHERE ROWID > (SELECT MIN(ROWID)FROM 테이블명 bWHERE b.컬럼명 = a.컬럼명);cs 세 번째, 중복된 데이터들 중 가장 나중에 등록된 데이터를 제외하고 모두 삭제하기
12345DELETE FROM 테이블명 aWHERE ROWID < (SELECT MAX(ROWID)FROM 테이블명 bWHERE a.컬럼명 = b.컬럼명);cs 출처의 블로그 글을 읽어보면,세 번째 방법의 경우 나중에 들어온 데이터라도 ROWID가 낮을 수 있어서 원하는 방향으로 삭제가 안될 수도 있다고 한다.* 데이터를 삭제하기 전에 꼭 먼저 SELECT로 조회해보고 삭제하기!!출처: http://rahm.tistory.com/52
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] VARCHAR2(10) 과 VARCHAR2(10 CHAR)의 차이점 (0) 2018.10.02 [Oracle] MySQL과 Oracle 테이블 JOIN 걸어서 UPDATE하는 방법 (0) 2018.09.23 ORA-00932: 일관성 없는 데이터 유형: -이(가) 필요하지만 CLOB임 - 에러 해결 (0) 2018.09.13 [oracle] 오라클에서 System.out.print()?! 프린트 하는 법 (0) 2018.09.04 [Oracle] 오라클 CLOB형 LENGTH(길이) 구하기, SUBSTR(문자열 자르기) 하는 방법 (0) 2018.09.04