2012-07-24 85 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是一个MySQL扩展到标准SQL。它控制ALTER TABLE如果新表中的唯一键上存在重复项,或者如果启用严格模式时发生警告,它将如何工作。如果未指定IGNORE,则复制将中止并在发生重复键错误时回退。如果指定了IGNORE,则只有第一行用于具有唯一键上的重复项的行。其他冲突的行被删除。不正确的值将被截断为最接近的匹配可接受值。

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

+0

感谢,这将删除现有表中的所有重复条目? – David542 2012-07-24 00:43:01

+0

@ David542:是的,请参阅上面引用的手册摘录。 – eggyal 2012-07-24 00:43:55

0

您是否考虑过在表格顶部放置语义层/视图?

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

该问题询问如何*删除*重复的行,而不是如何*隐藏*它们。 – 2012-07-24 00:45:15

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; 

`