2010-07-17 19 views
6

Je dois supprimer l'enregistrement en double de la table dans mysql. j'ai donc un nom de table champs « employé » sont empid, empname, empssncomment supprimer les lignes dupliquées d'une table dans mysql

pour obtenir doublon j'ai écrit une requête

 SELECT COUNT(empssn), empssn 
     FROM employee 
GROUP BY empssn 
    HAVING COUNT(empssn)>1 

Maintenant, je veux supprimer les doublons. pour cela j'ai une requête écrite est.

DELETE FROM employee 
      WHERE (empid, empssn) NOT IN (SELECT MIN(empid), empssn 
                  FROM employee 
                GROUP BY empssn); 

vous pouvez supposer les enregistrements dans le tableau sont

EmpId EmpName EmpSSN 
------------------------------- 
1 Jack  555-55-5555 
2 Joe  555-56-5555 
3 Fred  555-57-5555 
4 Mike  555-58-5555 
5 Cathy  555-59-5555 
6 Lisa  555-70-5555 
7 Jack  555-55-5555 
8 Mike  555-58-5555 
9 Cathy  555-59-5555 
10 Lisa  555-70-5555 
11 Lisa  555-70-5555 

mais j'ai une erreur de MySQL est

Vous ne pouvez pas spécifier la table cible 'des employés' pour la mise à jour dans la clause FROM

Répondre

9

Le truc de l'encapsuler dans une table dérivée fonctionne pour ce cas ? (Basé sur http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/)

DELETE FROM employee WHERE (empid, empssn) NOT IN 
(
SELECT empid, empssn FROM 
(
SELECT MIN(empid) AS empid, empssn FROM employee GROUP BY empssn 
) X 
); 

Modifier Yep il semble fonctionner cette fin.

+0

merci cela m'a aidé dans mon cas :) –

Questions connexes