2010-07-17 10 views
6

Ich muss doppelte Datensatz aus der Tabelle in Mysql löschen. So habe ich einen Tabellennamen "Mitarbeiter" Felder sind empid, empname, empssnSo löschen Sie doppelte Zeilen aus einer Tabelle in mysql

für doppelten Datensatz immer ich eine Abfrage

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

i doppelte Datensätze löschen möchten. Dafür habe ich eine Anfrage geschrieben.

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

können Sie Datensätze in der Tabelle übernehmen sind

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 

, aber ich habe eine MySQL-Fehler

Sie ist nicht Zieltabelle 'Arbeitnehmer' für die Aktualisierung in FROM-Klausel angeben

Antwort

9

Der Trick, es in eine abgeleitete Tabelle zu verpacken, funktioniert für diesen Fall ? (Basierend auf 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 
); 

bearbeiten Yep scheint es, dieses Ziel zu arbeiten.

+0

danke es hat mir in meinem Fall geholfen :) –