본문 바로가기
MySql

MySQL remove duplicate rows based on one column value

by 베이스 공부 2020. 11. 24.
반응형

아래 테이블이 있고 중복 "refID"가있는 행을 삭제해야하지만 해당 참조가있는 행이 하나 이상 있어야합니다. 즉, 행 4와 5를 제거해야합니다.

+----+-------+--------+--+
| ID | refID |  data  |  |
+----+-------+--------+--+
|  1 |  1023 | aaaaaa |  |
|  2 |  1024 | bbbbbb |  |
|  3 |  1025 | cccccc |  |
|  4 |  1023 | ffffff |  |
|  5 |  1023 | gggggg |  |
|  6 |  1022 | rrrrrr |  |
+----+-------+--------+--+

 

해결 방법

 

이것은 Gordon Linoff의 쿼리와 유사하지만 하위 쿼리가 없습니다.

DELETE t1 FROM table t1
  JOIN table t2
  ON t2.refID = t1.refID
  AND t2.ID < t1.ID

이것은 내부 조인을 사용하여 refID는 같지만 ID가 더 낮은 다른 행이있는 행만 삭제합니다.

하위 쿼리를 피할 때의 이점은 검색에 인덱스를 사용할 수 있다는 것입니다. 이 쿼리는 refID + ID에 대한 다중 열 인덱스에서 잘 수행되어야합니다.

 

참조 페이지 https://stackoverflow.com/questions/28432093

 

 

반응형

댓글