Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer les lignes en double dans MySQL (ignore la clé primaire)

L'exemple suivant supprime les lignes en double dans MySQL tout en ignorant la clé primaire ou la colonne d'identifiant unique.

L'exemple supprime les lignes en double mais en conserve une. Ainsi dans le cas de deux lignes identiques, il en supprime une et conserve l'autre.

Exemple de données

Supposons que nous ayons un tableau avec les données suivantes :

SELECT * FROM Dogs;

Résultat :

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

Nous pouvons voir que les deux premières lignes sont des doublons et que les trois dernières lignes sont des doublons.

Recherchez les doublons

Tout d'abord, sélectionnons vérifier notre table pour voir combien de lignes sont des doublons :

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

Résultat :

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

Nous pouvons voir qu'il y a deux rangées avec Bark Smith et trois rangées avec Wag Johnson.

Nous allons dédupliquer le tableau afin qu'il n'en contienne qu'un de chaque.

Supprimer les doublons

L'exécution du code suivant dédouble le tableau ci-dessus :

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

Résultat :

Query OK, 3 rows affected (0.00 sec)

Voyons le résultat :

SELECT * FROM Dogs;

Résultat :

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

Nous avons supprimé avec succès les lignes en double du tableau.