要件: name/email/card_num フィールドに基づいてユーザー テーブルから重複データを削除します;
アイデア: group by メソッドを使用して「重複」データをクエリし、そのデータを一時テーブルに保存し、その後一時テーブルのデータを指定されたテーブルに保存します;
誤解と解決策: group by メソッドは一部のフィールド (重複のない指定されたフィールド) しか取得できず、一度に完全なデータを取得することはできませんが、group by 結果セット内の ID は max 関数によって取得でき、その後すべてのデータが取得されますID セットに基づいてクエリを実行できます。
ユーザー グループから id、名前、電子メール、カード番号として max(id) を選択します。 BY name,email,card_num;
SELECT ID from (SELECT max(id ) as id ,name,email,card_num FROM users GROUP BY name,email,card_num) as T;
SELECT * from users where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);
create TEMP TABLE tmp_data as SELECT * from users where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name, email,card_num) as T);
users_copy1 に挿入します。 select * from tmp_data; #検出
テスト結果: 1.4w 個のデータの間に 2300 個のデータが重複しており、実際の実行結果は 0.7 秒であり、現在のニーズをほぼ満たしています。
MySQL チュートリアル 列にアクセスして学習してください。
以上が指定されたフィールドに基づいたデータベースの重複排除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。