##ROWID를 사용하여 중복된 데이터를 제거 할 수 있다.


#첫번째. 

DELETE FROM 테이블명

WHERE ROWID IN (

SELECT ROWID FROM (

SELECT * FROM (

SELECT ROW_NUMBER() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명) AS num

FROM 테이블명

)

WHERE num > 1 (-> num의 값이 1초과인 데이터들만 삭제)

)

);


#두번째. (중복된 데이터들 중에서 나중에 등록된 데이터 제거)

DELETE FROM 테이블명 별칭a

WHERE ROWID > (SELECT MIN(ROWID) FROM 테이블명 별청b

  WHERE b.컬럼명 = a.컬럼명);


#세번째. (중복된 데이터들 중에서 나중에 등록된 데이터를 살리고 나머지를 제거)

DELETE FROM 테이블명 별칭a

WHERE ROWID < (SELECT MAX(ROWID) FROM 테이블명 별칭b

  WHERE a.컬럼명 = b.컬럼명);


단, 세번째 방법의 경우 나중에 생성된 데이터의 ROWID가 작을 수도 있기 때문에 나중에 들어온 데이터를 살리는 경우는 맞지 않을 수 있다.



출처: http://rahm.tistory.com/52 [RAHM]

+ Recent posts