2012-07-25 8 views
1

varchar(16) 유형의 name이라는 열이 하나만있는 create이라는 테이블이 있습니다.하나의 열로 중복 데이터를 삭제 하시겠습니까?

이제 모든 중복 이름을 삭제하고 그 중 하나만 남기고 싶습니다.

예 :

name1 
name2 
name3 
name3 
name3 
name4 

는 이후

name1 
name2 
name3 
name4 

하십시오 조언 될 것입니다.

나는 검색어를 찾고 있었지만 대부분의 검색어는 색인과 관련이있었습니다.

답변

1

사용 ROW_NUMBER는

WITH cte 
AS 
(SELECT name, row_number() OVER (PARTITION BY name ORDER BY name) AS row_num 
    FROM  yourTable 
) 
DELETE FROM cte 
WHERE row_num > 1 
+0

모든 중복 데이터가 삭제되었지만 삭제되지 않았습니다. 하지만 어쨌든. 그것은 나를 위해 충분히 작동 :) 나는 색인으로 열을 켤 수 있도록 중복 데이터를 삭제해야했습니다. – nambla

+0

이것은 당신이 rit를 원했던 와트입니다. 중복 된 행을 삭제하고 유일한 행만 삭제하십시오! – praveen

+2

틀린, 첫 번째 코드 블록은 포함 된 모든 행, 원본 및 중복을 삭제합니다. – MyNameIsKo

0

MySQL은 인덱스는 데이터베이스 엔진이 효율적으로 분할하고 쿼리를보다 효율적으로되도록 데이터를 정렬 할 수있는 방법입니다. 색인을 사용하여 수행 할 수있는 작업 중 하나는 특정 열이나 데이터 필드에 고유 항목 만 포함되도록 지정하는 것입니다. 그러한 색인을 작성하면 이미 저장된 데이터의 추가가 금지됩니다.

색인이없는 열이있는 경우 임시 테이블을 사용하여 중복 제거를 권장 할 수 있습니다. 원본 테이블에서 모든 고유 한 (고유 한) 이름을 선택하여 임시 테이블을 만듭니다. 그런 다음 원본 테이블의 모든 내용을 삭제하고 레코드를 다시 복사하십시오. 이 시점에서 색인을 추가하는 것이 좋습니다.

+0

안녕하세요 모든 고유 데이터에 대한 임시 테이블을 만들 수 있습니까? 다시 삽입하려면 어떤 쿼리를 사용해야합니까? – nambla

관련 문제