ホームページ >データベース >mysql チュートリアル >指定されたフィールドに基づいたデータベースの重複排除

指定されたフィールドに基づいたデータベースの重複排除

步履不停
步履不停オリジナル
2019-06-19 13:14:597237ブラウズ

指定されたフィールドに基づいたデータベースの重複排除

要件: name/email/card_num フィールドに基づいてユーザー テーブルから重複データを削除します;

アイデア: group by メソッドを使用して「重複」データをクエリし、そのデータを一時テーブルに保存し、その後一時テーブルのデータを指定されたテーブルに保存します;

誤解と解決策: group by メソッドは一部のフィールド (重複のない指定されたフィールド) しか取得できず、一度に完全なデータを取得することはできませんが、group by 結果セット内の ID は max 関数によって取得でき、その後すべてのデータが取得されますID セットに基づいてクエリを実行できます。

テストのアイデア

  • 重複排除後にデータをクエリする

ユーザー グループから id、名前、電子メール、カード番号として max(id) を選択します。 BY name,email,card_num;

  • 重複排除されたデータから ID セットを取得します

SELECT ID from (SELECT max(id ) as id ,name,email,card_num FROM users GROUP BY name,email,card_num) as T;

  • 重複排除されたデータから設定された ID を取得し、ソース データのレコード リストから取得します

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

実際の方法

    ##重複排除データからセットされたIDを取得し、ソースデータからレコードリストを取得し、これらのリストデータをテーブル内の一時的な場所に格納します

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; #検出

#検出結果は、クエリの最初のステップでの重複排除後のデータの総数と同じですか

  • #select count(*) from users_copy1;

テスト結果: 1.4w 個のデータの間に 2300 個のデータが重複しており、実際の実行結果は 0.7 秒であり、現在のニーズをほぼ満たしています。

MySQL 関連の技術記事の詳細については、

MySQL チュートリアル 列にアクセスして学習してください。

以上が指定されたフィールドに基づいたデータベースの重複排除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。