GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment supprimer les lignes en double dans MySQL

Présentation

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.

Prérequis

  • Un système avec MySQL installé
  • Un compte utilisateur racine MySQL
  • Accès à une fenêtre de terminal / ligne de commande (Ctrl-Alt-T, Recherche> 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 directement à la section suivante.

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

mysql –u root –p

Lorsque vous y êtes invité, entrez la racine mot de passe pour 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>

Créer une base de données de test

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

SHOW DATABASES;

Alternativement, vous pouvez créer une nouvelle base de données en saisissant la commande suivante :

CREATE DATABASE IF NOT EXISTS testdata;

Pour commencer à travailler dans votre nouveau testdata utilisation de la base de données :

USE testdata;

Ajouter un tableau 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 :

CREATE TABLE dates (
id INT PRIMARY KEY AUTO_INCREMENT,
day VARCHAR(2) NOT NULL,
month VARCHAR(10) NOT NULL,
year VARCHAR(4) NOT NULL

);

INSERT INTO dates (day,month,year)
VALUES (’29’,’January’,’2011’),
(’30’,’January’,’2011’),
(’30’,’January’,’2011’),
(’14’,’February,’2017’),
(’14’,’February,’2018’),
(‘23’,’March’,’2018’),
(‘23’,’March’,’2018’),
(‘23’,’March’,’2019’),
(‘29’,’October’,’2019’),
(‘29’,’November’,’2019’),
(‘12’,’November’,’2017’),
(‘17’,’August’,’2018’),
(‘05’,’June’,’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 year;


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

Afficher les lignes en double

Pour savoir s'il y a des lignes en double dans la base de test, utilisez la commande :

SELECT
     day, COUNT(day),
     month, COUNT(month),
     year, COUNT(year)
FROM 
     dates
GROUP BY
     day,
     month,
     year
HAVING 
     COUNT(day) > 1
     AND COUNT(month) > 1
     AND COUNT(year) > 1;

Le système affichera toutes les valeurs qui sont des doublons. 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.

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 :

USE testdata;

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 :

delete t1 FROM dates t1
INNER  JOIN dates t2
WHERE
    t1.id < t2.id AND
    t1.day = t2.day AND
    t1.month = t2.month AND
    t1.year = t2.year;

Vous pouvez également utiliser la commande de Afficher le doublon Lignes pour vérifier la suppression.

Option 2 :Supprimer les lignes en double à l'aide d'un tableau intermédiaire

Vous pouvez créer une table intermédiaire et utilisez-le 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 :

CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];

Par exemple, pour créer une copie de la structure de l'exemple de table dates la commande est :

CREATE TABLE copy_of_dates SELECT DISTINCT id, day, month, year FROM dates;

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

DROP TABLE [source_table];
ALTER TABLE [copy_of_source] RENAME TO [source_table];

Par exemple :

DROP TABLE dates;
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 ensuite. Vérifiez la version de MySQL avant d'essayer cette méthode.

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

SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];

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

SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number;

Les résultats incluent un row_number colonne. Les données sont partitionnées par id et dans chaque partition, il y a 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 , et ainsi de suite.

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 un DELETE requête avec le row_number comme filtre.

Pour supprimer les lignes en double, exécutez :

DELETE FROM [table_name] WHERE row_number > 1;

Dans notre exemple dates table, la commande serait :

DELETE FROM dates WHERE row_number > 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 :

SELECT * FROM [table_name];

Par exemple :

SELECT * FROM dates;

Cent OS
  1. Comment changer le classement de la base de données MySQL ?

  2. Comment installer le serveur de base de données MySQL 8 sur CentOS 8

  3. Comment installer MySQL 8.0 sur CentOS/RHEL 8

  4. Comment installer le serveur de base de données MySQL sur CentOS

  5. Comment réparer une table de base de données MySQL corrompue

Comment supprimer une base de données MySQL dans cPanel

Comment réparer la base de données MySQL dans cPanel ?

Comment réparer une base de données MySQL ?

Comment optimiser une base de données MySQL ?

Comment créer une base de données dans MySQL

Comment renommer un nom de base de données MySQL