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

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

4

3 回答 3

2

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

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

手册所述:

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

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

于 2012-07-24T00:42:00.480 回答
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;

`

于 2012-07-24T00:50:52.383 回答
0

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

select  person_url, movie_url
from name
group by person_url, movie_url
于 2012-07-24T00:44:08.580 回答