Suppression de lignes en double dans MySQL : une astuce de table unique
Le traitement des enregistrements en double dans une base de données peut être un problème courant. Dans MySQL, la suppression de ces duplications peut être réalisée en plusieurs étapes. Passons en revue un scénario spécifique et abordons les pièges potentiels en cours de route.
Supposons que nous ayons une table nommée « employé » avec les champs « empid », « empname » et « empssn ». Pour identifier les enregistrements en double, nous exécutons une requête pour compter les occurrences de chaque 'empssn' :
<code class="sql">SELECT COUNT(empssn), empssn FROM employee GROUP BY empssn HAVING COUNT(empssn) > 1</code>
Cette requête renverra des lignes indiquant quels 'empssn' apparaissent plus d'une fois.
Ensuite, nous essayons de supprimer les enregistrements en double à l'aide de la requête suivante :
<code class="sql">DELETE FROM employee WHERE (empid, empssn) NOT IN (SELECT MIN(empid), empssn FROM employee GROUP BY empssn);</code>
Malheureusement, cette requête peut rencontrer l'erreur : "Vous ne pouvez pas spécifier la table cible 'employé' pour la mise à jour dans la clause FROM."
Pour contourner cette erreur, nous pouvons utiliser une technique qui consiste à encapsuler la requête interne dans une table dérivée :
<code class="sql">DELETE FROM employee WHERE (empid, empssn) NOT IN (SELECT empid, empssn FROM (SELECT MIN(empid) AS empid, empssn FROM employee GROUP BY empssn) X);</code>
Cette table dérivée agit effectivement comme une table temporaire, nous permettant de référencer la cible table 'employé' dans l'instruction DELETE et la clause FROM.
En implémentant cette astuce, nous pouvons réussir à supprimer les enregistrements en double de la table 'employé'. Cette solution résout non seulement l'obstacle technique, mais fournit également une compréhension plus approfondie de la manipulation de bases de données dans MySQL.
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!