1

800,000 を超えるレコードのテーブルがあります。行ごとに 8 つの列があります。column1 と column2 と column5 が同じであるレコードの重複を削除する必要があります。すべての列が同じである必要があります。

例えば


列 1 | 列 2 | .... | 列5


ジョン | 英語 | .... | 合格

アレックス | 英語 | .... | 合格

ジョン | 化学| .... | 合格

ジョン | 英語 | .... | 合格


1レコードと最後のレコードを削除したい。(つまり、john+Eng+Pass)

4

2 に答える 2

1

テーブルに名前が付けられt、t の主キーがpk.

2 つのステップで作業を行うことをお勧めします。

最初のステップ:削除する行を特定する

CREATE TEMPORARY TABLE to_delete AS 
select distinct
     t2.pk
from
     t t1
inner join
     t t2
where
     t1.c1 = t2.c1 and 
     t1.c2 = t2.c2 and 
     t1.c5 = t2.c5 and
     t2.pk > t1.pk      #erase this line to
                        #delete all dups rows

2 番目のステップ:行を削除する

delete from t
where t.pk in (select pk from to_delete )

簡略化されたサンプル広告 sqlfiddle: http://sqlfiddle.com/#!2/f97da/3/0

免責事項:リスクを超えて行を削除してください。

于 2013-03-07T17:44:38.007 に答える
0

以下のクエリを試してください:

create table abc (id int(11) primary key auto_increment, col_1 varchar(255), 
col_2 varchar(255), col_3 varchar(255));

insert into abc (col_1, col_2, col_3) values ('a', 'a', 'a'),
('a', 'b', 'c'), ('a','a', 'a'), ('b','b','b'),('a','b','c');

DELETE a1.* from abc a1 inner join abc a2 ON a1.col_1 = a2.col_1 
AND a1.col_2 = a2.col_2 AND a1.col_3 = a2.col_3 AND a1.id <> a2.id;

SQLフィドル:

http://sqlfiddle.com/#!2/08e4b/1

于 2013-03-07T18:12:45.263 に答える