Einzelnen Beitrag anzeigen
  #3  
Alt 29.10.2004, 13:05:21
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi,

mal aus dem Kopf raus, sprich unbedingt mit Testdaten testen, bevor Du es produktiv anwendest:

mit:
Code:
SELECT t1.primary-key AS pk1
      ,t2.primary-key AS pk2
  FROM tabelle1 AS t1 INNER JOIN tabelle1 AS t2 ON t1.email = t2.email 
 WHERE t1.primary-key < t2.primary-key // WICHTIG, sonst Kreuzprodukt aus allen Inhalten und quasi Endlosschleife!
bekommst Du die ids der doppelten Einträge raus. Diese stehen in pk1, pk2 dient der stichpunktartigen manuellen Kontrolle der Einträge, kann aber auch weggelassen werden.
Die IDs liesst Du Dir am besten aus und machst anschliessend einen DELETE FROM tabelle1 WHERE primary-key IN (...).

WICHTIG: Die JOIN- Bedingung muss natürlich über alle Felder gehen, die identisch sein müssen, damit ein Eintrag als doppelt gilt! Ansonsten schmeisst Du Dir z.B. den Eintrag "meier, info@a.c" raus, obwohl unter der gleichen Email- Adresse noch der Eintrag "müller, info@a.c" steht!!


edit:
ACHTUNG: MySQL unterscheidet nicht (immer?) zwischen GROSS- und kleinschreibung. Sprich: "a" und "A" werden beim Vergleich mit "=" als identisch behandelt. Achtet hier unbedingt drauf!



HTH,

Andy

P.S.: Doppelte Einträge kannst Du natürlich auch mit UNION bekommen, geht aber nicht in allen Versionen von MySQL.
P.S.S.: Achte darauf, daß Du für obige Abfrage auf die JOIN- Felder einen Index setzt, wenn es sehr viele Datensätze zum kontrollieren gibt, sonst kann es dauern.

Geändert von diver-network (15.11.2004 um 08:51:53 Uhr)
Mit Zitat antworten