Effizientes Entfernen doppelter Zeilen in SQL Server
Stellen Sie sich eine Employee
-Tabelle vor, die eine EmployeeName
-Spalte enthält. Das Ziel besteht darin, doppelte Zeilen ausschließlich auf der Grundlage des Felds EmployeeName
zu entfernen. Dies kann mithilfe einer prägnanten T-SQL-Abfrage in SQL Server erreicht werden.
Die Lösung:
Die Nutzung von Fensterfunktionen bietet eine elegante Lösung. Die folgende Abfrage weist jedem Datensatz innerhalb jeder rn
-Gruppe eine eindeutige Zeilennummer (EmployeeName
) zu, sortiert nach empId
. Anschließend werden Zeilen gelöscht, in denen rn
größer als 1 ist (d. h. Duplikate).
<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>
Um eine Vorschau der zu löschenden Zeilen anzuzeigen, bevor Sie die DELETE
-Anweisung ausführen, führen Sie diese SELECT
-Abfrage 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>
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze in SQL Server mit einer einzigen T-SQL-Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!