Löschen Sie doppelte Datensätze in SQL Server?
Betrachten Sie eine Spalte mit dem Namen EmployeeName
Tabelle Employee
. Das Ziel ist, zu löschen wiederholt Datensätze, basierend auf den EmployeeName
Feld.
EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
Mithilfe einer Abfrage möchte ich die Datensätze löschen, die wiederholt werden.
Wie kann dies gemacht werden mit TSQL SQL-Server?
InformationsquelleAutor der Frage usr021986 | 2010-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dazu können Sie mit window-Funktionen. Es wird um die betrogenen von empId, und löschen Sie alle, aber die erste.
Ausführen als wählen Sie, um zu sehen, was würde gelöscht werden:
InformationsquelleAutor der Antwort John Gibb
Davon aus, dass Ihre Mitarbeiter auch die Tabelle hat eine eindeutige Spalte (
ID
im Beispiel unten), die folgenden arbeiten:Diese verlassen die version mit der niedrigsten ID in der Tabelle.
Bearbeiten
Re McGyver ' s Kommentar - als von SQL 2012
Für 2008 R2 und früher,
Für 2008R2 müssen Sie werfen die
GUID
auf eine Art, unterstützt durchMIN
z.B.SqlFiddle für verschiedene Arten von Sql 2008
SqlFiddle für verschiedene Datentypen in Sql 2012
InformationsquelleAutor der Antwort StuartLC
Könnten Sie versuchen, etwas wie das folgende:
(vorausgesetzt, Sie haben eine Ganzzahl, basierend eindeutiges Feld)
Persönlich werden aber ich würde sagen, Sie waren besser dran versuchen, zu korrigieren die Tatsache, dass doppelte Einträge werden der Datenbank Hinzugefügt werden, bevor Sie auftreten, anstatt als post-fix-it-Betrieb.
InformationsquelleAutor der Antwort Ben Cawley
InformationsquelleAutor der Antwort Kumar Manish-PMP
Die Magie von common table expressions.
InformationsquelleAutor der Antwort Mostafa Elmoghazi
Versuchen
InformationsquelleAutor der Antwort Anurag Garg
Wenn Sie nach einer Möglichkeit suchen, Duplikate entfernen, noch haben Sie eine foreign key verweist auf die Tabelle mit den Duplikaten, die Sie könnte nehmen Sie die folgende Vorgehensweise verwenden Sie eine langsame, aber effektive cursor.
Wird es den Standort der doppelte Schlüssel auf die die foreign key Tabelle.
InformationsquelleAutor der Antwort Peter
Hier ist ein schöner Weg, der bereinigen von Datensätzen in einer Tabelle, die eine identity-Spalte basierend auf einer gewünschten primär-Schlüssel, die Sie definieren können zur Laufzeit. Bevor ich anfange, ich werde füllen Sie ein Beispiel-Datensatz für die Arbeit mit mit dem folgenden code:
Nächstes werde ich einen Typ namens ColumnNames:
Schließlich werde ich erstellen Sie eine gespeicherte Prozedur mit den 3 folgenden Vorsichtsmaßnahmen:
1. Der proc wird einen erforderlichen parameter @tablename, definiert den Namen der Tabelle, die Sie löschen in der Datenbank.
2. Der proc hat einen optionalen parameter @Spalten, die Sie verwenden können, um die Felder definieren, aus denen sich die gewünschten primären Schlüssel, die Sie löschen vor. Wenn dieses Feld leer gelassen wird, wird angenommen, dass alle Felder außer der id-Spalte machen, bis die gewünschte primary key.
3. Wenn doppelte Datensätze gelöscht, wird der Datensatz mit dem niedrigsten Wert in ihm ist die identity-Spalte wird beibehalten.
Hier ist mein delete_dupes stored proc:
Sobald dies erfüllt ist, können Sie löschen alle Ihre doppelte Datensätze durch ausführen des proc. Löschen der Duplikate ohne die Festlegung eines gewünschten Primärschlüssel verwenden Sie diesen Aufruf:
Löschen der Duplikate, basierend auf einem definierten gewünschten Primärschlüssel verwenden Sie diesen Aufruf:
InformationsquelleAutor der Antwort Daniel Marcus
Sehen Sie bitte in der unten Weise der Löschung zu.
Erstellt eine Beispieltabelle mit dem Namen
@Employee
geladen und es mit den angegebenen Daten.Ergebnis:
Ich weiß, das ist gefragt, vor sechs Jahren, die Entsendung nur incase es ist hilfreich, für niemanden.
InformationsquelleAutor der Antwort Jithin Shaji