카테고리 없음

MySQL - 중복 레코드 삭제하기

쓸쓸한사람 2023. 3. 4. 12:07

https://airpage.org/xe/tool_data/24063

 

[TIP] MySQL - 2개이상의 필드 정보를 이용하여 중복 레코드 삭제하기 - 개발도구 - AiRPAGE

예를 들어, 아래와 같이 중복된 레코드가 잔뜩 있다고 가정합니다. mysql> SELECT * FROM my_dup_table; idNo field1 field2 field3 1 abcd abcde abcd 2 abcd abcde abcd <--중복 3 ttt ttt ttt 4 ttt tta ttt 5 abcd a...

airpage.org

 

 

저기에서 퍼온글

 

예를 들어, 아래와 같이 중복된 레코드가 잔뜩 있다고 가정합니다.

 

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM my_dup_table;
 
idNo field1 field2 field3
1      abcd  abcde  abcd
2      abcd  abcde  abcd <--중복
3      ttt       ttt  ttt
    ttt       tta  ttt
5      abcd  abcde atd
    abcde abcde abcd
    ttt  tta  ttt  <--중복
    ttt  ttt  ttt  <--중복

물론, idNo 같은 인덱스 필드의 레코드 값들은 각자 고유하다는 가정도 포함 합니다.

 

즉, field1, field2, field3 필드들의 레코드 값들이 상기 내용과 같이 레코드 간에 중복이 있을수 있으며, 아래와 같이 중복된 레코드들을 제거하고 싶다고 가정합니다.

 
1
2
3
4
5
6
idNo field1 field2 field3
1  abcd  abcde  abcd
3  ttt  ttt  ttt
4  ttt  tta  ttt
5  abcd abcde atd
6  abcde abcde abcd

 

MySQL 쿼리는 아래와 같습니다.

 
1
delete from [테이블] where [인덱스필드] NOT IN (SELECT * from (SELECT MIN([인덱스필드]) FROM [테이블] GROUP BY [중복필드1],[중복필드2], [중복필드3], ... ) AS tempTable);

 

예를 들면 아래와 같습니다.

 
1
delete from my_dup_table where idNo NOT IN (SELECT * from (SELECT MIN(idNo) FROM my_dup_table GROUP BY field1,field2, field3) AS te