Heim > Datenbank > MySQL-Tutorial > Wie lösche ich doppelte Datensätze aus einer SQL-Tabelle ohne Primärschlüssel?

Wie lösche ich doppelte Datensätze aus einer SQL-Tabelle ohne Primärschlüssel?

Barbara Streisand
Freigeben: 2025-01-03 03:13:40
Original
141 Leute haben es durchsucht

How to Delete Duplicate Records from an SQL Table Without a Primary Key?

Umgang mit doppelten Datensätzen in SQL-Tabellen ohne Primärschlüssel

Wenn kein Primärschlüssel vorhanden ist, kann das Löschen doppelter Datensätze aus einer SQL-Tabelle problematisch sein herausfordernd. Betrachten wir das folgende Szenario:

Eine Tabelle mit dem Namen „Mitarbeiter“ enthält die folgenden Datensätze ohne Primärschlüssel:

create table employee
(
 EmpId number,
 EmpName varchar2(10),
 EmpSSN varchar2(11)
);

insert into employee values(1, 'Jack', '555-55-5555');
insert into employee values (2, 'Joe', '555-56-5555');
insert into employee values (3, 'Fred', '555-57-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
insert into employee values (1, 'Jack', '555-55-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6 ,'Lisa', '555-70-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
Nach dem Login kopieren

Bei dieser Tabelle besteht das Ziel darin, die doppelten Datensätze unter Beibehaltung zu löschen einzigartige. Um dies zu erreichen, können wir eine Kombination aus einer „ROW_NUMBER()“-Funktion und einer „DELETE“-Anweisung verwenden:

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM Employee) SUB
WHERE SUB.cnt > 1
Nach dem Login kopieren

Den Code aufschlüsseln:

  • Die innere Abfrage verwendet die Funktion ROW_NUMBER(), um jeder Zeile für jede Gruppe doppelter Datensätze eine fortlaufende Nummer zuzuweisen. Die PARTITION BY-Klausel partitioniert die Daten nach den Spalten EmpId, EmpName und EmpSSN, und ORDER BY EmpId stellt sicher, dass Zeilen in aufsteigender Reihenfolge von EmpId nummeriert werden.
  • Die äußere Abfrage verwendet die cnt-Spalte aus der inneren Abfrage als ein Filter, um nur die doppelten Zeilen auszuwählen (cnt > 1).
  • Die DELETE-Anweisung verwendet die Unterabfrage, um die doppelten Zeilen zu löschen aus der Originaltabelle.

Durch die Ausführung dieser Abfrage werden die doppelten Datensätze in der Tabelle „Mitarbeiter“ entfernt, sodass nur die eindeutigen Datensätze übrig bleiben:

select * from employee;

EmpId EmpName EmpSSN
1      Jack   555-55-5555
2      Joe    555-56-5555
3      Fred   555-57-5555
4      Mike   555-58-5555
5      Cathy  555-59-5555
6      Lisa   555-70-5555
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze aus einer SQL-Tabelle ohne Primärschlüssel?. 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