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 ?

Comment supprimer les lignes en double dans une table MySQL lorsque la table cible est dans la clause FROM ?

DDD
DDDoriginal
2024-11-01 11:15:30281parcourir

How to Delete Duplicate Rows in a MySQL Table When the Target Table is in the FROM Clause?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn