如何摆脱表中的重复结果

时间:2012-07-24 00:37:05

标签: mysql

我有一张表有一些重复的结果。例如:

`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);

但是,它是一个非常大的表,我有几个索引需要重新创建。我将如何进行这种转换,即不创建新表?

3 个答案:

答案 0 :(得分:2)

您可以使用UNIQUE关键字在表格列上添加IGNORE索引:

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

the manual中所述:

  

IGNORE是标准SQL的MySQL扩展。如果新表中的唯一键上有重复项,或者如果启用了严格模式时出现警告,它将控制ALTER TABLE的工作方式。如果未指定IGNORE,则复制将中止并在发生重复键错误时回滚。如果指定了IGNORE,则只对第一行使用唯一键上具有重复项的行。其他冲突的行将被删除。不正确的值将被截断为最接近的匹配可接受值。

这也可以防止将来添加重复项。

答案 1 :(得分:0)

您是否考虑过在表格顶部放置一个语义层/视图进行重复删除?

select  person_url, movie_url
from name
group by person_url, movie_url

答案 2 :(得分: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;

`