ホームページ >データベース >mysql チュートリアル >MySQL重複排除方法
この記事では主にMySQL重複排除方法の関連情報を紹介しますので、必要な方は
MySQL重複排除方法
[初歩] 重複行はほとんどありません
個別に確認して削除してください。 一行ずつ手動で行います。
[中級] 単一フィールドの繰り返しに基づく重複排除
例: ID フィールドの重複排除
使用法: ID の繰り返しフィールドの値を取得し、同じ ID フィールドが存在する行を使用しますを見つけて、異なるデータ フィールドを比較し、最小 (または最大) のフィールドが配置されている行を除くすべての重複行を削除します。通常、主キーの値は一意の値である必要があり、同じであってはいけないため、比較には主キーが使用されます。
id name 1 a 1 b 2 c 2 a 3 c
結果:
id name 1 a 2 a
操作:
delete from a_tmp where id in (select * from (select b.id from a_tmp b group by b.id having count(b.id) >1) bb) and name not in (select * from (select min(a.name) from a_tmp a GROUP BY a.id having count(a.id) >1) aa);
注:
上記の太字と緑色の単語はエイリアスであり、select * from (...) の形式を使用する必要があります。そうでない場合はエラーになります。レポート:
[Err] 1093 - FROM 句で update のターゲット テーブル 'a_tmp' を指定することはできません
[上級] 複数のフィールドで繰り返します
例: ID の場合、同じもので重複排除名前、つまり: 同じ ID と名前を持つ行は重複行としてカウントされ、同じ ID で異なる名前を持つ行は重複しない行としてカウントされます
使用方法: 単一フィールドと同様に、主キーは通常、主キーの値は一意の値である必要があるため、比較に使用されます。
id name rowid 1 a 1 1 a 2 1 b 3 2 b 4 2 b 5 3 c 6 3 d 7
結果:
id name rowid 1 a 1 1 b 3 2 b 4 3 c 6 3 d 7
操作:
最初のタイプ:
delete from a_tmp where (id,name) in (select * from (select b.id,b.name from a_tmp b group by b.id,b.name having count(b.id) >1) bb) and rowid not in (select * from (select min(a.rowid) from a_tmp a group by a.id,a.name having count(a.id) >1) aa);
2 番目のタイプ:
id フィールドと name フィールドの値を接続し、一時テーブル b_tmp に挿入します。 【中級】単一フィールド判定・削除方法をご利用いただけます。
#a_tmpテーブルの2つのフィールドと一意の値フィールド間の接続の値をb_tmpテーブルに挿入します
insert into b_tmp select concat(id,name),rowid from a_tmp; #查出需要留下来的行 select id_name,max(rowid) from b_tmp group by id_name having count(id_name)>1; #使用【中级】的方法,或存储过程完成去重的工作
【究極】各行には同じデータのコピーが2つあります
例:
使用法: 行全体 データはすべて同じであり、1 行を残し、それと同一のすべての行を削除する条件制限がないため、SQL ステートメントを使用して削除することはできません。異なるフィールドはありません。異なるフィールドを自分で作成できます。つまり、フィールドを追加し、それを自動インクリメントに設定し、それを主キーとして設定すると、上限の値が自動的に追加されます。
id name 1 a 1 a 1 b 1 b 2 c 2 c 3 c 3 c
結果:
id name rowid 1 a 1 1 b 3 2 c 5 3 c 7
操作:
自己増加フィールドを追加し、それを主キーとして一時的に設定します。
上記の[中級]と[上級]の方法を使用してください。
以上がMySQL重複排除方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。