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
Mary-Kate OlsenOriginal
2025-01-12 12:06:44505Durchsuche

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>

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>

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!

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