Maison > Article > base de données > Comment supprimer les lignes en double dans une table MySQL lorsque la table cible est dans la clause FROM ?
Suppression de lignes en double d'une table dans MySQL
Lorsque vous traitez une table contenant des enregistrements en double, il devient nécessaire de les supprimer pour conserver les données intégrité et efficacité. Dans MySQL, pour y parvenir, il faut identifier et supprimer les lignes en double, un processus qui peut être accompli via des requêtes spécifiques.
Dans votre cas, vous avez déjà déterminé les enregistrements en double en fonction du champ empssn à l'aide de cette requête :
SELECT COUNT(empssn), empssn FROM employee GROUP BY empssn HAVING COUNT(empssn) > 1
Pour supprimer les enregistrements en double, vous avez tenté la requête suivante :
DELETE FROM employee WHERE (empid, empssn) NOT IN ( SELECT MIN(empid), empssn FROM employee GROUP BY empssn );
Cependant, vous avez rencontré une erreur car MySQL ne permet pas de spécifier la table cible dans la clause FROM pour une requête de mise à jour.
Pour résoudre ce problème, une approche consiste à envelopper la sous-requête dans une table dérivée :
DELETE FROM employee WHERE (empid, empssn) NOT IN ( SELECT empid, empssn FROM ( SELECT MIN(empid) AS empid, empssn FROM employee GROUP BY empssn ) X );
En utilisant cette requête modifiée, vous créez effectivement une table dérivée temporaire (X) contenant les données nécessaires de la table des employés. La requête DELETE principale peut ensuite référencer cette table dérivée pour supprimer les lignes en double en fonction de la combinaison unique de empid et empssn. Cette approche devrait résoudre l'erreur que vous avez rencontrée et vous permettre de supprimer avec succès les enregistrements en double.
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!