[SQL] MySQL은 하나를 제외한 모든 중복 행을 삭제 하시겠습니까? [복제]
SQLMySQL은 하나를 제외한 모든 중복 행을 삭제 하시겠습니까? [복제]
어떻게 MySQL의 테이블에서 모든 중복 데이터를 삭제할 것인가?
예를 들어, 다음 데이터 :
SELECT * FROM names;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
나는 이름과 구별 이름을 선택 사용한다; 그것은 SELECT 질의 인 경우.
어떻게에만 중복을 제거하고 각 하나의 기록을 유지하기 위해 DELETE로 이런 짓을 했을까?
해결법
-
==============================
1.NB - 당신은 당신의 테이블의 테스트 사본에 처음이 작업을 수행 할 필요가!
NB - 당신은 당신의 테이블의 테스트 사본에 처음이 작업을 수행 할 필요가!
내가 그것을했을 때, 나는 또한 포함하지 않는 n1.id <> n2.id,이 테이블의 모든 행을 삭제 한 것을 발견했다.
나는 MySQL의 5.1에서이 방법을 사용
확실하지 다른 버전에 대한.
업데이트 : 중복을 제거하기 위해 인터넷 검색 사람 때문에 여기까지 영업 이익의 질문 DELETE에 대해이지만, INSERT를 사용하여 DISTINCT하는 것이 훨씬 빠르다는 것을 명심하시기 바랍니다. DELETE 사용하는 동안 800 만 개 행이 데이터베이스의 경우, 아래의 쿼리는 2 시간 이상 걸렸다 아직 완료되지 않은, 13 분이 걸렸다.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value) SELECT DISTINCT cellId,attributeId,entityRowId,value FROM tableName;
-
==============================
2.당신은 가장 낮은 id 값이있는 행을 유지하려면 :
당신은 가장 낮은 id 값이있는 행을 유지하려면 :
DELETE FROM NAMES WHERE id NOT IN (SELECT * FROM (SELECT MIN(n.id) FROM NAMES n GROUP BY n.name) x)
당신이 id 값을 원하는 경우에 그 최고입니다 :
DELETE FROM NAMES WHERE id NOT IN (SELECT * FROM (SELECT MAX(n.id) FROM NAMES n GROUP BY n.name) x)
하위 쿼리의 하위 쿼리는 MySQL을위한 필요, 또는 당신은 1093 오류가 발생합니다.
from https://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL에서 분할 기능과 동등한? (0) | 2020.03.07 |
---|---|
[SQL] 어떻게 SQL에서 임의의 행을 요청하는? (0) | 2020.03.06 |
[SQL] MySQL은 어떻게 범위에없는 날짜를 채우기 위해? (0) | 2020.03.06 |
[SQL] 신원 증가는 SQL Server 데이터베이스에 점프 (0) | 2020.03.06 |
[SQL] 복수와 LINQ에 SQL 조인, 왼쪽 카운트 조인 (0) | 2020.03.06 |