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 に答える