Mysql
 sql >> база данни >  >> RDS >> Mysql

Изтриване на дублиращи се редове в MySQL (игнорира първичен ключ)

Следният пример изтрива дублиращи се редове в MySQL, като игнорира първичния ключ или колоната с уникален идентификатор.

Примерът изтрива дублиращи се редове, но запазва един. Така че в случай на два еднакви реда, той изтрива един от тях и запазва другия.

Примерни данни

Да предположим, че имаме таблица със следните данни:

SELECT * FROM Dogs;

Резултат:

+---------+-------------+------------+
| DogId   | FirstName   | LastName   |
|---------+-------------+------------|
| 1       | Bark        | Smith      |
| 2       | Bark        | Smith      |
| 3       | Woof        | Jones      |
| 4       | Ruff        | Robinson   |
| 5       | Wag         | Johnson    |
| 6       | Wag         | Johnson    |
| 7       | Wag         | Johnson    |
+---------+-------------+------------+

Можем да видим, че първите два реда са дублирани, а последните три реда са дублирани.

Намерете дубликатите

Първо, нека изберем проверка на нашата таблица, за да видим колко реда са дублирани:

SELECT 
    FirstName, 
    LastName, 
    COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;

Резултат:

+-----------+----------+-------+
| FirstName | LastName | Count |
+-----------+----------+-------+
| Bark      | Smith    |     2 |
| Wag       | Johnson  |     3 |
+-----------+----------+-------+

Виждаме, че има два реда с Барк Смит и три реда с Уаг Джонсън.

Ще премахнем фалшифицирането на таблицата, така че да съдържа само по един от всеки.

Изтриване на дубликатите

Изпълняването на следния код премахва дублирането на горната таблица:

DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
    d1.DogId < d2.DogId AND
    d1.FirstName = d2.FirstName AND
    d1.LastName = d2.LastName;

Резултат:

Query OK, 3 rows affected (0.00 sec)

Нека видим резултата:

SELECT * FROM Dogs;

Резултат:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     2 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

Успешно премахнахме дублиращи се редове от таблицата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Условна разделена трансформация:Експортирайте данни от SQL Server в Oracle и MySQL бази данни

  2. преобразуване на низ от дата в поле за дата и час на mysql

  3. Как да замените първичния ключ на Django с различно цяло число, което е уникално за тази таблица

  4. mysql - създаване на механизъм, подобен на последователностите на Oracle

  5. Отдалечената връзка с MySQL се проваля с неизвестен метод за удостоверяване