Scénario : Les lignes en double dans les tables MySQL peuvent provenir de diverses sources, notamment d'erreurs de saisie de données. La suppression de ces doublons est essentielle pour maintenir l'intégrité des données et les performances optimales de la base de données.
Problème : Le défi réside dans la suppression de toutes les instances sauf une de chaque ligne en double.
Solution et précautions :
Remarque critique : Sauvegardez toujours votre table avant d'exécuter une requête DELETE. Des instructions DELETE mal mises en œuvre peuvent entraîner une perte de données irréversible.
Méthode 1 : Conserver la ligne avec l'ID le plus bas
Cette approche conserve la ligne avec la plus petite valeur d'ID :
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
Méthode 2 : Préserver la ligne avec l'ID le plus élevé
Cette alternative conserve la ligne possédant la plus grande valeur d'ID :
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
Efficacité améliorée pour les grandes tables :
Pour les tables de grande taille, la INSERT ... SELECT DISTINCT
méthode suivante fournit une solution plus efficace :
<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS SELECT DISTINCT cellId, attributeId, entityRowId, value FROM tableName; TRUNCATE TABLE tableName; INSERT INTO tableName SELECT * FROM tempTableName; DROP TEMPORARY TABLE tempTableName;</code>
Cela crée une table temporaire contenant uniquement des lignes uniques, tronque la table d'origine, puis la remplit avec les données uniques de la table temporaire. C'est généralement plus rapide que d'utiliser DELETE
pour les grands ensembles de données. N'oubliez pas de remplacer tableName
, cellId
, attributeId
, entityRowId
et value
par vos noms de colonnes réels.
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!