Heim > Datenbank > MySQL-Tutorial > Wie lösche ich doppelte Datensätze in SQL Server basierend auf einem bestimmten Feld mithilfe einer einzelnen Abfrage?

Wie lösche ich doppelte Datensätze in SQL Server basierend auf einem bestimmten Feld mithilfe einer einzelnen Abfrage?

Mary-Kate Olsen
Freigeben: 2025-01-12 12:06:44
Original
503 Leute haben es durchsucht

How to Delete Duplicate Records in SQL Server Based on a Specific Field Using a Single Query?

Löschen Sie doppelte Datensätze in SQL Server basierend auf bestimmten Feldern

Angenommen, es gibt eine Tabelle mit dem Namen „Employee“, die eine Spalte mit dem Namen „EmployeeName“ enthält. Die Aufgabe besteht darin, redundante Datensätze basierend auf dem Feld „EmployeeName“ zu löschen und die folgenden Daten zu erhalten:

EmployeeName
Anand
Anil
Dipak

Wie kann ich dies mit einer einzigen Abfrage mithilfe von TSQL in SQL Server erreichen?

Lösung mit Fensterfunktionen:

Um dieses Problem zu lösen, ist die Fensterfunktion eine praktikable Methode. Mit Fensterfunktionen können Sie Vorgänge für eine Reihe von Zeilen innerhalb einer durch die OVER-Klausel definierten Partition ausführen. In diesem Beispiel wird die Partition durch die Spalte „EmployeeName“ definiert.

Die folgende Abfrage identifiziert und entfernt doppelte Datensätze basierend auf dem Feld „EmployeeName“:

<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>
Nach dem Login kopieren

Erklärung:

  • Die Fensterfunktion row_number() wird verwendet, um jedem Datensatz in jeder Partition (definiert durch EmployeeName) einen numerischen Rang – beginnend bei 1 – zuzuweisen.
  • Die Löschanweisung zielt dann auf Zeilen mit rn größer als 1 ab, bei denen es sich um Duplikate handelt.

Gelöschte Datensätze anzeigen:

Um eine Vorschau der Datensätze anzuzeigen, die gelöscht werden, ohne die Löschanweisung tatsächlich auszuführen, verwenden Sie die folgende Auswahlabfrage:

<code class="language-sql">select *
from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze in SQL Server basierend auf einem bestimmten Feld mithilfe einer einzelnen Abfrage?. 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