Heim >Datenbank >MySQL-Tutorial >Wie lösche ich doppelte Datensätze in SQL Server mit ROW_NUMBER()?
Datenintegrität: Entfernen doppelter Einträge in SQL Server
Die Aufrechterhaltung einer sauberen und effizienten Datenbank erfordert die regelmäßige Entfernung doppelter Datensätze. Dies ist für die Datenintegrität und optimale Datenbankleistung von entscheidender Bedeutung. Wenn identische Einträge vorhanden sind (z. B. mehrere Mitarbeiter mit demselben Namen), ist die Beseitigung von Redundanzen unerlässlich.
SQL Server bietet eine leistungsstarke Lösung mit Fensterfunktionen und DELETE-Anweisungen. Fensterfunktionen bieten die Möglichkeit, Berechnungen über verwandte Zeilen hinweg durchzuführen.
Zur Veranschaulichung betrachten wir das Löschen doppelter Einträge basierend auf der Spalte EmployeeName
. Die Funktion ROW_NUMBER()
weist jeder Zeile innerhalb einer Partition (Gruppe identischer EmployeeName
-Werte) einen eindeutigen Rang zu. Dadurch können wir Duplikate gezielt löschen.
Hier ist die T-SQL-Abfrage:
<code class="language-sql">DELETE x FROM ( SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId) FROM Employee ) x WHERE RN > 1;</code>
Diese Abfrage funktioniert wie folgt: Eine Unterabfrage erstellt eine temporäre Tabelle und wendet ROW_NUMBER()
an, partitioniert nach EmployeeName
und geordnet nach empId
. Dadurch wird jedem Mitarbeiternamen ein eindeutiger Rang (RN) zugewiesen, wobei Duplikate fortlaufend nummeriert werden.
Die DELETE
-Anweisung zielt dann auf diese temporäre Tabelle (Alias „x“) ab und entfernt alle Zeilen, in denen RN größer als 1 ist. Dadurch bleibt effektiv nur die erste Instanz jedes EmployeeName
erhalten und alle nachfolgenden Duplikate werden gelöscht.
Überprüfung vor der Ausführung:
Bevor Sie die DELETE
-Anweisung ausführen, ist es wichtig, ihre Auswirkungen zu überprüfen. Führen Sie diese SELECT
-Anweisung aus:
<code class="language-sql">SELECT * FROM ( SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId) FROM Employee ) x WHERE RN > 1;</code>
Dadurch wird eine Vorschau der zum Löschen vorgesehenen Datensätze angezeigt. Sobald Sie die Richtigkeit bestätigt haben, führen Sie die DELETE
-Anweisung aus, um die doppelten Datensätze dauerhaft aus der Employee
-Tabelle zu entfernen.
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze in SQL Server mit ROW_NUMBER()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!