MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)

MySQLで重複行から1行のみを返すには?

MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。

1. テーブルを作成する

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable1998
(
    Name varchar(20)
);
Query OK, 0 rows affected (0.61 sec)

2. レコードを挿入する

INSERTコマンドを使って、いくつかのレコードをテーブルに挿入します。ここでは「Robert」と「David」を意図的に重複させて登録しています。

mysql> insert into DemoTable1998 values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1998 values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1998 values('Robert');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1998 values('David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1998 values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1998 values('David');
Query OK, 1 row affected (0.10 sec)

3. 全レコードを表示する

SELECT文でテーブル内のすべてのレコードを確認してみましょう。

mysql> select * from DemoTable1998;

実行結果は以下のとおりです。「Robert」と「David」がそれぞれ2件ずつ登録されていることがわかります。

+--------+
| Name   |
+--------+
| Robert |
| Chris  |
| Robert |
| David  |
| Bob    |
| David  |
+--------+
6 rows in set (0.00 sec)

4. DISTINCTで重複を除外する

ここで本題です。SELECT文にDISTINCTキーワードを付けることで、重複している行を1行にまとめて取得できます。

mysql> select distinct * from DemoTable1998;

実行結果は以下のとおりです。重複していた「Robert」と「David」がそれぞれ1行だけ表示され、全6行から4行に絞り込まれました。

+--------+
| Name   |
+--------+
| Robert |
| Chris  |
| David  |
| Bob    |
+--------+
4 rows in set (0.01 sec)

まとめ

MySQLで重複行を除外して一意なデータだけを取得したい場合は、SELECT文にDISTINCTキーワードを指定するだけで簡単に実現できます。SELECT DISTINCT *のように記述すれば、すべてのカラムの組み合わせが完全に一致する行のみが1行にまとめられます。なお、特定のカラムだけを対象に重複を除外したい場合は、SELECT DISTINCT カラム名 FROM テーブル名のようにカラムを明示的に指定することも可能です。

  1. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),

  2. MySQLのGROUP_CONCATで複数行の値を1つのフィールドにまとめてリストとして取得する方法

    はじめにMySQLでは、複数の行に分かれている値を1つのフィールドに連結したリストとして取得したい場面がよくあります。たとえば、科目ごとに受講している学生名をカンマ区切りでまとめて表示したい場合などです。このような場合は、集約関数のGROUP_CONCAT()を使用することで簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながらGROUP_CONCAT()の使い方を順を追って解説します。サンプルテーブルの作成まず、科目名(SubjectName)と学生名(StudentName)を持つテーブルを作成します。mysql> create table DemoTab