2015-01-21 9 views
0

db2에서 중복 된 레코드를 모두 제거하려면 어떻게합니까? 나는 여러 가지 해답을 보았지만 테이블에있는 그 세트에서 하나의 레코드 만 남겨둔 채 복사본 만 제거합니다. 이것은 내가 이미 발견 한 것입니다.db2에서 중복 된 레코드를 모두 제거하십시오. (중복 레코드가 아님)

AS (SESSION.TEST FROM RN AS ONE BY ROWNUMBER() OVER (PARTITION, TWO, THREE 해당))에서 삭제 WHERE RN> 1;

그러나 테이블에 그 중 하나를 남기지 않는 복제본을 포함하는 모든 레코드를 제거하는 쿼리가 필요합니다.

AA 1 <-3
CC 4

PS이 너무
BB 삭제 -이
AA 2 < 삭제 :> = 1이 테이블이 비어 것대로 작동하지 않습니다 사용 RN을 모든 레코드를 삭제합니다.

답변

0

원래 문은 어떤 경우에 작동하지 않을 것 - 그것은 단지 행 다음 애프터 아무것도 을 삭제할 것 (당신이 PARTITION BY의 고유 ID 열을 나열하는 것 주어진 실제로 전혀 아무 것도 삭제하지 않아야) .

LUW에서 다음과 같은 작업을해야합니다 :

DELETE FROM (SELECT col1, col2, col3 
      FROM <tableName> ot 
      JOIN (SELECT col1, col2 
        FROM <tableName> 
        GROUP BY col1, col2 
        HAVING COUNT(*) > 1) dt 
       ON dt.col1 = ot.col1 
        AND dt.col2 = ot.col2) 

를 또한 다음과 같은 작업을해야 내가 믿는

, 그리고 (대부분의 RDBMS에 대한 작업) 보편적 가까이 (나는 이것을 테스트 할 방법이 없지만) :

DELETE FROM Temp 
WHERE (col1, col2) IN (SELECT col1, col2 
         FROM Temp 
         GROUP BY col1, col2 
         HAVING COUNT(*) > 1) 

SQL Fiddle Example