In diesem Beispiel werden Duplikate in der Tabelle "tt_address" mit gleichem Feld "email" gelöscht. Es handelt sich hierbei um eine "Correlated Subquery" (EXISTS), die gewöhnlich performanter ist als eine einfache Subquery (IN). Sinnvollerweise sollte man zunächst die entsprechende Abfrage zum Anzeigen der betroffenen Datensätze ausführen ;)

Duplikate anzeigen

# Alle Vorkomnisse
SELECT uid, email FROM tt_address WHERE EXISTS (
	SELECT uid FROM tt_address dbl WHERE tt_address.email = dbl.email AND tt_address.uid <> dbl.uid
) ORDER BY email;

# Nur Vorkomnisse abzüglich einer (diejenigen, die gelöscht werden)
SELECT uid, email FROM tt_address WHERE EXISTS (
	SELECT uid FROM tt_address dbl WHERE tt_address.email = dbl.email AND tt_address.uid < dbl.uid
) ORDER BY email;

Duplikate löschen

DELETE FROM tt_address WHERE EXISTS (
	SELECT uid FROM tt_address dbl WHERE tt_address.email = dbl.email AND tt_address.uid < dbl.uid
);




Kommentare