Comment Supprimer Les Lignes En Double Dans MySQL 3 Façons De Supprimer

Introduction

Il existe plusieurs cas dans lesquels vous pouvez rencontrer des lignes en double dans votre base de données MySQL. Ce guide vous guidera tout au long du processus de suppression des valeurs de ligne en double dans MySQL.

Conditions préalables

  • Un système avec MySQL installé
  • Un compte utilisateur racine MySQL
  • Accès à une fenêtre de terminal / ligne de commande (Ctrl-Alt-T, Rechercher > Terminal)

Configuration De La Base De Données De Test

Si vous avez déjà une base de données MySQL sur laquelle travailler, passez à la section suivante.

Sinon, ouvrez une fenêtre de terminal et tapez ce qui suit :

mysql –u racine –p

Lorsque vous y êtes invité, entrez le mot de passe root de votre installation MySQL. Si vous avez un compte d’utilisateur spécifique, utilisez ces informations d’identification au lieu de root.

L’invite du système devrait se transformer en :

mysql>

Remarque : Si vous ne parvenez pas à vous connecter au serveur MySQL, vous pouvez recevoir le message indiquant que l’accès a été refusé. Reportez-vous à notre article sur la façon de résoudre cette erreur MySQL si vous avez besoin d’aide.

Créer Une Base De Données De Test

Vous pouvez créer une nouvelle table dans une base de données existante. Pour ce faire, trouvez la base de données appropriée en listant toutes les instances existantes avec :

AFFICHER LES BASES DE DONNÉES ;

Vous pouvez également créer une nouvelle base de données en saisissant la commande suivante :

CRÉER UNE BASE DE DONNÉES SI NON EXISTE testdata ;

Pour commencer à travailler dans votre nouvelle base de données testdata , utilisez :

UTILISER les données de test ;

Ajouter Une Table Et Des Données

Une fois dans la base de données, ajoutez une table avec les données ci-dessous à l’aide de la commande suivante :

CRÉER TABLE dates (
id INT CLÉ PRIMAIRE AUTO_INCREMENT,
jour VARCHAR NON NULL,
mois VARCHAR NON NULL,
année VARCHAR NOT NULL

);

INSERT INTO dates mois, année)
VALEURS ('29','Janvier','2011'),
('30','Janvier','2011'),
('30','Janvier','2011'),
('14','Février,'2017'),
('14','Février,'2018'),
('23','Mars','2018'),
('23','Mars','2018'),
('23','Mars','2019'),
('29','Octobre','2019'),
('29','Novembre','2019'),
('12','Novembre','2017'),
('17','Août','2018'),
('05','Juin','2016');

Afficher Le Contenu Du Tableau Des Dates

Pour voir un affichage de toutes les dates que vous avez saisies, classées par année, tapez :

SELECT * FROM dates ORDER BY année;

La sortie doit afficher une liste de dates dans l’ordre approprié.

Afficher Les Lignes En Double

Pour savoir s’il existe des lignes en double dans la base de test, utilisez la commande :

SÉLECTIONNER
 jour, COUNT(jour),
 mois, COUNT(mois),
 année, COUNT(année)
DE
 Rendez-vous
PAR GROUPE
 journée,
 mois,
 an
AYANT
 COUNT(jour) > 1
 AND COUNT(mois) > 1
 AND COUNT(an) > 1 ;

Le système affichera toutes les valeurs en double. Dans ce cas, vous devriez voir :

Ce format fonctionne pour sélectionner plusieurs colonnes. Si vous avez une colonne avec un identifiant unique, comme une adresse e-mail sur une liste de contacts ou une seule colonne de date, vous pouvez simplement sélectionner dans cette colonne.

Remarque : découvrez d’autres moyens de rechercher des lignes en double dans MySQL.

Suppression Des Lignes En Double

Avant d’utiliser l’une des méthodes mentionnées ci-dessous, n’oubliez pas que vous devez travailler dans une base de données existante. Nous allons utiliser notre exemple de base de données :

UTILISER les données de test ;

Option 1 : Supprimer Les Lignes En Double à L’aide De INNER JOIN

Pour supprimer les lignes en double dans notre table MySQL de test, utilisez MySQL JOINS et saisissez ce qui suit :

supprimer t1 à partir des dates t1
INNER JOIN dates t2
OÙ
 t1.id < t2.id ET
 t1.jour = t2.jour ET
 t1.mois = t2.mois ET
 t1.année = t2.année ;

Vous pouvez également utiliser la commande Afficher les lignes en double pour vérifier la suppression.

Remarque : Si vous disposez d’un identifiant de colonne unique, vous pouvez le remplacer par les identifiants de colonne month , day et year , en omettant les opérateurs AND . Ceci est conçu pour vous aider à supprimer des lignes avec plusieurs colonnes identiques.

Option 2 : Supprimer Les Lignes En Double à L’aide D’une Table Intermédiaire

Vous pouvez créer une table intermédiaire et l’utiliser pour supprimer les lignes en double. Cela se fait en transférant uniquement les lignes uniques vers la table nouvellement créée et en supprimant celle d’origine (avec les lignes en double restantes).

Pour ce faire, suivez les instructions ci-dessous.

1. Créez une table intermédiaire ayant la même structure que la table source et transférez les lignes uniques trouvées dans la source :

CRÉER TABLE SÉLECTIONNER DISTINCT DE ;

Par exemple, pour créer une copie de la structure des dates de table d’exemple,  la commande est :

CREATE TABLE copy_of_dates SELECT DISTINCT id, jour, mois, année FROM dates ;

2. Cela fait, vous pouvez supprimer la table source avec la commande drop et renommer la nouvelle :

DROP TABLE ;
ALTER TABLE RENAME TO ;

Par exemple:

Supprimer les dates de TABLE ;
ALTER TABLE copy_of_dates RENAME TO dates ;

Option 3 : Supprimer Les Lignes En Double à L’aide De ROW_NUMBER()

Important : Cette méthode n’est disponible que pour MySQL version 8.02 et ultérieure. Vérifiez la version de MySQL avant d’essayer cette méthode.

Une autre façon de supprimer les lignes en double consiste à utiliser la fonction ROW_NUMBER() .

SÉLECTIONNER *. ROW_NUMBER () Sur (PARTITION BY ORDER BY ) as ;

Par conséquent, la commande pour notre exemple de table serait :

SÉLECTIONNER *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number ;

Les résultats incluent une colonne row_number  . Les données sont partitionnées par identifiant  et dans chaque partition, il existe des numéros de ligne uniques. Les valeurs uniques sont étiquetées avec le numéro de ligne 1 , tandis que les doublons sont 2 , 3 , etc.

Par conséquent, pour supprimer les lignes en double, vous devez tout supprimer sauf celles marquées d’un 1. Cela se fait en exécutant une requête DELETE avec le row_number comme filtre.

Pour supprimer les lignes en double, exécutez :

DELETE FROM WHERE numéro_ligne > 1 ;

Dans notre exemple de table de dates , la commande serait :

DELETE FROM dates WHERE numéro_ligne > 1 ;

La sortie vous indiquera combien de lignes ont été affectées, c’est-à-dire combien de lignes en double ont été supprimées.

Vous pouvez vérifier qu’il n’y a pas de lignes en double en exécutant :

SÉLECTIONNER * DE ;

Par exemple:

SELECT * FROM dates ;

Remarque : Pensez également à utiliser les outils d’optimisation des requêtes SQL pour trouver la meilleure façon d’exécuter une requête et d’améliorer les performances.

Conclusion

Vous devriez maintenant être en mesure de supprimer les lignes en double dans MySQL et d’améliorer les performances de votre base de données. N’oubliez pas que les nouvelles implémentations du mode strict de MySQL ont limité la fonctionnalité des fonctions requises.

Cet article a-t-il été utile?

Oui Non