Heim >Datenbank >MySQL-Tutorial >Wie lösche ich effizient doppelte Zeilen in T-SQL basierend auf Schlüsselspalten?

Wie lösche ich effizient doppelte Zeilen in T-SQL basierend auf Schlüsselspalten?

Barbara Streisand
Barbara StreisandOriginal
2025-01-15 16:10:43372Durchsuche

How to Efficiently Delete Duplicate Rows in T-SQL Based on Key Columns?

Löschen Sie doppelte Zeilen in T-SQL basierend auf Primärschlüsselspalten effizient

Frage:

Aufgrund eines Fehlers bei der Datenerstellung enthält die Tabelle eine große Anzahl doppelter Zeilen. Das Ziel besteht darin, redundante Zeilen zu eliminieren und gleichzeitig eine Zeile für jede eindeutige Kombination von Primärschlüsselspalten beizubehalten. Allerdings enthält die Tabelle einige Spalten, die für die Frage nicht relevant sind und leicht unterschiedliche Daten enthalten und ignoriert werden müssen.

Lösung:

Für SQL Server 2005 und höher können Sie die Funktion OVER() und allgemeine Tabellenausdrücke (CTE) verwenden, um doppelte Zeilen effizient zu entfernen.

CTE- und DELETE-Anweisungen:

<code class="language-sql">WITH cte AS (
  SELECT [foo], [bar], 
     row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
  FROM TABLE
)
DELETE cte WHERE [rn] > 1</code>

Anleitung:

  • CTE erstellt eine sortierte Teilmenge von Zeilen basierend auf den Spalten foo und bar.
  • Die ORDER BY baz-Klausel ist optional und ermöglicht die Reihenfolge innerhalb jeder Partition (Primärschlüsselspaltengruppe).
  • Die DELETE-Anweisung löscht alle Zeilen im CTE mit einem Rang größer als 1 und eliminiert so effektiv Duplikate, während für jede Primärschlüsselspaltenkombination eine Zeile erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie lösche ich effizient doppelte Zeilen in T-SQL basierend auf Schlüsselspalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn