MySQL クエリは重複データをどのように処理しますか?重複データ ステートメントを削除するフィルター

MySQLクエリは重複データをどのように処理しますか?重複するデータ ステートメントを削除するフィルター

MySQL 重複データの処理

一部の MySQL データ テーブルに重複レコードが存在する可能性があります。重複データの存在を許可する場合もありますが、これらの重複データを削除する必要がある場合もあります。

この章では、データ テーブルの重複データを防止する方法と、データ テーブルの重複データを削除する方法を紹介します。


テーブル内のデータの重複を防ぐ

MySQL データ テーブルの指定されたフィールドを次のように設定できます。 主キー または UNIQUE(ユニーク) データの一意性を確保するためのインデックス。

例を試してみましょう。以下のテーブルにはインデックスと主キーがないため、テーブルは複数の重複レコードを許可します。

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

テーブル内のフィールド first_name と last_name を設定する場合、データを繰り返すことはできません。二重主キー モードを設定して、データの一意性を設定できます。二重主キーを設定すると、そのキーのデフォルト値NULL にすることはできませんが、NOT NULL に設定することはできます。次のように:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

一意のインデックスを設定すると、重複データを挿入すると、SQL ステートメントが正常に実行されず、エラーがスローされます。

INSERT IGNORE INTO と INSERT INTO の違いは、INSERT IGNORE はデータベースに既に存在するデータを無視することです. データベースにデータがない場合は新しいデータを挿入し、データがある場合はこのデータをスキップします.このようにして、データベース内の既存のデータを保存することができ、ギャップにデータを挿入するという目的を達成することができます。

次の例では、INSERT IGNORE INTO を使用しています。これはエラーなしで実行され、データ テーブルに重複データを挿入しません。

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO データの挿入時に、レコードの一意性を設定した後、重複データが挿入された場合、エラーは返されず、警告のみが返されます。また、プライマリまたは一意のレコードがある場合は、最初に削除します。新しいレコードを挿入します。

データの一意性を設定する別の方法は、次のように UNIQUE インデックスを追加することです。

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

統計重複データ

以下では、テーブル内の first_name と last_name の重複レコードの数を数えます。

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

上記のクエリ ステートメントは、person_tbl テーブル内の重複レコードの数を返します。一般に、重複する値を照会するには、次の手順を実行します。

  • 重複する可能性のある値が含まれている列を特定します。
  • それらの列をリストするには、列選択リストで COUNT(*) を使用します。
  • GROUP BY 句にリストされている列。
  • HAVING 句は、1 より大きい繰り返し回数を設定します。

重複データのフィルタリング

一意のデータを読み取る必要がある場合は、SELECT ステートメントで DISTINCT キーワードを使用して重複データをフィルター処理できます。

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

GROUP BY を使用して、テーブルから一意のデータを読み取ることもできます。

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

データの重複排除

データ テーブル内の重複データを削除する場合は、次の SQL ステートメントを使用できます。

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

もちろん、データテーブルにINDEX(インデックス)とPRIMAY KEY(主キー)を追加して、テーブル内の重複レコードを削除することもできます。以下の方法:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

Hope Chen Weiliang ブログ ( https://www.chenweiliang.com/ ) 共有 "MySQL はどのようにクエリを実行し、重複データを処理しますか?Filtering and Deduplication Statements」が役に立ちます。

この記事のリンクを共有することを歓迎します。https://www.chenweiliang.com/cwl-499.html

Chen WeiliangのブログのTelegramチャンネルへようこそ。最新のアップデートを入手できます!

🔔 貴重な「ChatGPT コンテンツ マーケティング AI ツール使用ガイド」をチャンネル トップ ディレクトリでいち早く入手してください! 🌟
📚 このガイドには非常に価値のある内容が含まれています。🌟これはめったにない機会です、お見逃しなく! ⏰⌛💨
気に入ったらシェア&いいね!
あなたの共有といいねは、私たちの継続的な動機です!

 

发表评论

あなたのメールアドレスが公開されることはありません。 必須アイテム * 标注

トップにスクロールします