Heim > Datenbank > MySQL-Tutorial > Wie kann ich doppelte Zeilen in einer Tabelle löschen und gleichzeitig das erste Vorkommen jeder eindeutigen Kombination beibehalten?

Wie kann ich doppelte Zeilen in einer Tabelle löschen und gleichzeitig das erste Vorkommen jeder eindeutigen Kombination beibehalten?

Linda Hamilton
Freigeben: 2025-01-23 01:31:10
Original
882 Leute haben es durchsucht

How Can I Delete Duplicate Rows in a Table While Preserving the First Occurrence of Each Unique Combination?

Eindeutige Zeilen beibehalten: Duplikatentfernung übernehmen

Im Bereich Datenbankoperationen ist es häufig erforderlich, doppelte Zeilen aus Tabellen zu löschen. Diese Aufgabe kann jedoch schwierig werden, wenn Zeilen keine eindeutigen Bezeichner haben. In dieser Frage wird diese Situation erörtert und nach einer Lösung gesucht, um doppelte Zeilen zu eliminieren und gleichzeitig das erste Vorkommen jeder eindeutigen Kombination beizubehalten.

Abfrage:

Die ursprünglich bereitgestellte Abfrage versucht, Zeilen basierend auf dem Vorhandensein doppelter ID-Werte zu löschen. Diese Methode schlägt jedoch fehl, da in der Tabelle kein solcher eindeutiger Bezeichner vorhanden ist. Stattdessen ist eine robustere Lösung erforderlich, um die Erkennung und Entfernung von Duplikaten zu bewältigen, ohne auf explizite Zeilenbezeichner angewiesen zu sein.

Verwenden Sie CTE und ROW_NUMBER:

Eine effektive Möglichkeit, dies zu erreichen, ist die Verwendung eines allgemeinen Tabellenausdrucks (CTE) in Verbindung mit der Funktion ROW_NUMBER(). Die CTE-Technik erstellt eine temporäre Tabelle CTE, die die ursprüngliche Spalte und eine zusätzliche Spalte RN enthält, die die Zeilennummer für jede Kombination von col1-Werten darstellt.

Partition und Nummer:

Die Funktion ROW_NUMBER() ermöglicht die Partitionierung von Zeilen basierend auf Spalte col1 und die Zuweisung von Zeilennummern in aufsteigender Reihenfolge innerhalb jeder Partition. Daher weisen doppelte Zeilen innerhalb derselben Partition eindeutige RN-Werte größer als 1 auf.

Löschvorgang:

Durch die Nutzung von CTE können wir alle Zeilen mit einem RN-Wert größer als 1 isolieren und entfernen und so Duplikate effektiv entfernen, während die erste Instanz jeder eindeutigen Kombination erhalten bleibt.

Ergebnis:

Nach Anwendung der geänderten Abfrage werden die erwarteten Ergebnisse erzielt:

<code>COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2</code>
Nach dem Login kopieren

Erweiterte Funktionen:

Abfragen können weiter angepasst werden, um die Erkennung und Entfernung von Duplikaten über mehrere Spalten hinweg zu ermöglichen, indem diese Spalten einfach zur PARTITION BY-Klausel hinzugefügt werden. Um beispielsweise col1 und col2 für die Duplikatidentifizierung zu berücksichtigen, würde die PARTITION BY-Klausel wie folgt lauten:

<code>ROW_NUMBER()OVER(PARTITION BY Col1, Col2 ORDER BY OrderColumn)</code>
Nach dem Login kopieren

Diese Methode bietet eine zuverlässige und effiziente Möglichkeit, doppelte Zeilen basierend auf ausgewählten Spalten zu entfernen und bietet so Flexibilität bei der Anpassung an unterschiedliche Datenanforderungen.

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Zeilen in einer Tabelle löschen und gleichzeitig das erste Vorkommen jeder eindeutigen Kombination beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage