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>
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>
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!