2012-07-24 2 views
0

일부 중복 결과가있는 테이블이 있습니다. 예를 들어 :테이블에서 중복 된 결과를 없애는 방법

`person_url` `movie_url` 
1    2 
1    2 
2    3 

이 될 것입니다 ->

나는 새로운 테이블을 생성하여 작업을 수행하는 방법을 알고
`person_url` `movie_url` 
1    2 
2    3 

, 그러나

create table tmp_credits (select distinct * from name); 

, 그것은 꽤 큰 테이블과 나는 그것에 다시 색인을 생성해야 할 몇 가지 색인이 있습니다. 새 테이블을 만들지 않고 어떻게이 변환을 수행 할 수 있습니까?

답변

2

당신은 IGNORE 키워드를 사용하여 테이블의 컬럼을 통해 UNIQUE 인덱스를 추가 할 수 있습니다

ALTER IGNORE TABLE name ADD UNIQUE INDEX (person_url, movie_url); 

the manual에 명시된 바와 같이 :

IGNORE 표준 SQL에 대한 MySQL 확장이다. 새로운 테이블의 고유 키에 중복 키가있는 경우 ALTER TABLE이 작동하는 방식을 제어하거나 엄격 모드가 사용되는 경우 경고가 발생하는 경우 제어합니다. IGNORE이 지정되지 않으면 중복 키 오류가 발생하면 사본이 중단되고 롤백됩니다. IGNORE이 지정되면 고유 키에 중복 된 행의 첫 번째 행만 사용됩니다. 충돌하는 다른 행이 삭제됩니다. 잘못된 값은 가장 일치하는 수용 가능한 값으로 잘립니다.

이렇게하면 나중에 중복이 추가되지 않습니다.

+0

감사합니다, 그것은 기존의 테이블의 모든 중복 항목을 삭제합니다? – David542

+0

@ David542 : 예, 위에 인용 된 설명서에서 발췌 한 내용을 참조하십시오. – eggyal

0

데드 업 (de-dups) 테이블의 맨 위에 의미 계층/뷰를 두는 것을 고려 했습니까?

select person_url, movie_url 
from name 
group by person_url, movie_url 
+0

질문은 * 중복 행을 제거하는 방법이 아닌 * 숨기기 *하는 방법을 묻습니다. –

0
`create table temp 
(col1 varchar(20),col2 varchar(20)); 
INSERT INTO temp VALUES 
('1','one'),('2','two'),('2','two'); 
`select col1,col2 from temp 
    union 
select col1,col2 from temp; 

`

관련 문제