MySQL / 14. Обработка повторяющихся записей

Устранение дубликатов из результата запроса

Задача
Вы хотите выбрать строки в результирующее множество так, чтобы оно не содержало дубликатов.

Решение
Используйте SELECT DISTINCT.

Обсуждение
Строки результирующего множества могут содержать дубликаты. Обычно так бывает при выборе только подмножества столбцов таблицы, так как уменьшается количество информации, которая могла бы отличать одну строку от другой. Чтобы результат содержал только уникальные строки, удалитедубликаты, добавив ключевое слово DISTINCT, которое указывает MySQL на необходимость возврата одного экземпляра для каждого набора значений столбцов. Например, если вы выбираете названия столбцов из таблицы cat_mailing, не используя DISTINCT, то выводится несколько дубликатов:

mysql> SELECT last_name, first_name
-> FROM cat_mailing ORDER BY last_name, first_name;

+-----------+--------------+
| last_name | first_name    |
+-----------+--------------+
| Baxter     | Wallace         |
| BAXTER  | WALLACE     |
| Baxter     | Wallace         |
| Brown    | Bartholomew |
| Isaacson | Jim                |
| McTavish | Taylor           |
| Pinter      | Marlene        |
| Pinter      | Marlene        |
+-----------+--------------+

Если добавить DISTINCT, дубликаты исчезают:

mysql> SELECT DISTINCT last_name, first_name
-> FROM cat_mailing ORDER BY last_name;

+-----------+---------------+
| last_name | first_name    |
+-----------+---------------+
| Baxter     | Wallace         |
| Brown    | Bartholomew |
| Isaacson | Jim                |
| McTavish | Taylor           |
| Pinter      | Marlene        |
+-----------+---------------+

Альтернативой инструкции DISTINCT является инструкция GROUP BY, содержащая имена выбираемых столбцов. В результате удаляются дубликаты и выводятся только уникальные комбинации значений указанных столбцов:

mysql> SELECT last_name, first_name FROM cat_mailing
-> GROUP BY last_name, first_name;

+-----------+--------------+
| last_name | first_name    |
+-----------+--------------+
| Baxter     | Wallace         |
| Brown    | Bartholomew |
| Isaacson | Jim                |
| McTavish | Taylor           |
| Pinter      | Marlene        |
+-----------+--------------+

Статьи по MySQL на эту тему:

Удаление дубликатов из таблицы
Устранение дубликатов из результата самообъединения