Effizientes Entfernen doppelter Zeilen in SQL Server: Ein CTE-Ansatz
Beim Umgang mit SQL Server-Tabellen ohne eindeutigen Schlüssel erfordert die Beseitigung doppelter Zeilen einen strategischen Ansatz. Dies kann mithilfe allgemeiner Tabellenausdrücke (Common Table Expressions, CTEs) in Verbindung mit der Funktion ROW_NUMBER()
effektiv erreicht werden.
Hier ist eine Lösung, die diese Technik demonstriert:
<code class="language-sql">WITH RowNumberedRows AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) FROM dbo.Table1 ) DELETE FROM RowNumberedRows WHERE RN > 1;</code>
Detaillierte Erklärung:
Der CTE mit dem treffenden Namen RowNumberedRows
weist jeder Zeile in der Tabelle eine eindeutige Zeilennummer (RN
) zu. Die Funktion ROW_NUMBER()
partitioniert die Zeilen basierend auf der Spalte col1
und weist innerhalb jeder Partition fortlaufende Nummern zu. Dadurch wird sichergestellt, dass das erste Vorkommen jeder Duplikatgruppe einen RN
von 1 erhält.
Die DELETE
-Anweisung zielt dann auf den CTE ab und entfernt alle Zeilen, in denen RN
größer als 1 ist. Dadurch bleibt nur die erste Zeile jedes Duplikatsatzes übrig, wodurch die Duplikate effektiv entfernt werden.
Beispiel:
Das Anwenden dieser Abfrage auf Beispieldaten führt zu folgendem Ergebnis:
COL1 | COL2 | COL3 | COL4 | COL5 | COL6 | COL7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
Beachten Sie, dass die doppelte Zeile „John“ erfolgreich entfernt wurde.
Die Anpassungsfähigkeit dieser Methode ist bemerkenswert. Durch Anpassen der Partitionierungsspalten innerhalb der Funktion ROW_NUMBER()
(z. B. PARTITION BY col1, col2
) können Sie nach Bedarf Eindeutigkeit basierend auf mehreren Spalten definieren.
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Zeilen in SQL Server ohne einen eindeutigen Schlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!