我有一张表有一些重复的结果。例如:
`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);
但是,它是一个非常大的表,我有几个索引需要重新创建。我将如何进行这种转换,即不创建新表?
答案 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;
`