Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double d'une table en SQL ?
SQL : élimination des lignes en double dans les tableaux
Défi :
Vous êtes confronté à une table dépourvue de clés primaires ou de contraintes, contenant plusieurs lignes avec des données identiques. L'objectif est de supprimer les lignes en double, en ne préservant qu'une seule instance de chaque ligne unique. Nous utiliserons une colonne nommée « clé » pour identifier les doublons, en garantissant qu'une seule entrée existe pour chaque valeur « clé » distincte.
Solution :
Ce processus comporte deux étapes clés :
La commande SQL suivante accomplit cela :
<code class="language-sql">DELETE FROM dups a USING ( SELECT MIN(ctid) as ctid, key FROM dups GROUP BY key HAVING COUNT(*) > 1 ) b WHERE a.key = b.key AND a.ctid <> b.ctid;</code>
Remarque importante : Cette méthode n'offre pas de contrôle sur la ligne spécifique qui est conservée.
Exemple illustratif :
Considérez cet exemple de tableau :
<code class="language-sql">CREATE TABLE people ( name varchar(50) NOT NULL, surname varchar(50) NOT NULL, age integer NOT NULL ); INSERT INTO people (name, surname, age) VALUES ('A.', 'Tom', 30), ('A.', 'Tom', 10), ('B.', 'Tom', 20), ('B', 'Chris', 20);</code>
Pour rechercher la première occurrence de doublons :
<code class="language-sql">SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1;</code>
Sortie :
ctid | name | surname |
---|---|---|
(0,1) | A. | Tom |
Suppression des autres doublons :
<code class="language-sql">DELETE FROM people a USING ( SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1 ) b WHERE a.name = b.name AND a.surname = b.surname AND a.ctid <> b.ctid;</code>
Les lignes restantes :
<code class="language-sql">SELECT * FROM people;</code>
Sortie :
name | surname | age |
---|---|---|
A. | Tom | 30 |
B. | Tom | 20 |
B | Chris | 20 |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!