Élimination des lignes en double dans MySQL à l'aide de SQL
Les lignes en double dans les bases de données MySQL peuvent entraîner des incohérences de données et des problèmes de performances. Cet article se concentre sur la suppression des lignes en double d'une table (par exemple, « jobs ») en fonction des colonnes « site_id », « title » et « company ».
Bien que les requêtes SQL complexes puissent identifier les doublons, une méthode plus efficace exploite les capacités d'indexation de MySQL. Cela implique la création d'un index unique, qui gère automatiquement la suppression des lignes en double.
L'approche de l'indice unique (obsolète)
Auparavant, une solution simple impliquait d'utiliser l'instruction ALTER IGNORE TABLE
avec un index UNIQUE
:
<code class="language-sql">ALTER IGNORE TABLE jobs ADD UNIQUE INDEX idx_name (site_id, title, company);</code>
Cette méthode supprimait automatiquement les lignes en double lors de la création de l'index. Cependant, cette approche est obsolète dans MySQL 5.6 et supprimée dans les versions ultérieures.
Avantages (pour les anciennes versions de MySQL) :
Solutions MySQL modernes (5.7 et versions ultérieures) :
Pour MySQL 5.7 et versions ultérieures, la méthode ALTER IGNORE TABLE
n'est plus prise en charge. Utilisez plutôt des instructions DELETE
avec des sous-requêtes pour supprimer les doublons. Cela nécessite une approche plus complexe mais garantit la compatibilité avec les versions actuelles de MySQL. Une solution typique consisterait à identifier les doublons avec une clause GROUP BY
et une clause HAVING
pour filtrer les nombres supérieurs à 1, puis à supprimer les lignes supplémentaires en fonction d'un critère spécifique (par exemple, en conservant la ligne avec l'ID le plus bas). La requête exacte dépend de vos besoins spécifiques et de la structure de votre table. Consultez la documentation MySQL pour des exemples détaillés de cette approche.
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!