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

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

Susan Sarandon
Freigeben: 2025-01-05 16:53:40
Original
589 Leute haben es durchsucht

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

Löschen doppelter Datensätze aus einer SQL-Tabelle ohne Primärschlüssel

In einer SQL-Tabelle ohne Primärschlüssel können doppelte Datensätze identifiziert und entfernt werden eine komplexe Aufgabe sein. Das Problem entsteht, wenn mehrere Zeilen in bestimmten Spalten dieselben Werte aufweisen, wodurch Redundanzen in den Daten entstehen. Um dieses Problem zu lösen, untersuchen wir eine Abfrage, die doppelte Zeilen basierend auf einer Kombination von Spalten effektiv eliminiert.

Betrachten Sie die folgende Tabelle mit dem Namen „Mitarbeiter“ mit den angegebenen Daten:

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

An Wenn wir doppelte Zeilen basierend auf „EmpId“ und „EmpSSN“ entfernen, können wir Folgendes nutzen Abfrage:

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

Erklärung:

  1. Die innere Abfrage berechnet die Zeilennummer für jede Zeile basierend auf den Partitionierungsspalten „EmpId“, „EmpName“ und „EmpSSN“. Dieser Schritt identifiziert die Reihenfolge der Zeilen für jede eindeutige Kombination dieser Felder.
  2. Die äußere Abfrage entfernt dann Zeilen, bei denen die Zeilennummer „cnt“ größer als 1 ist, was darauf hinweist, dass für diese spezifische Kombination doppelte Zeilen vorhanden sind.

Das Ausführen dieser Abfrage würde effektiv doppelte Datensätze aus der Tabelle „Mitarbeiter“ entfernen und gleichzeitig die ursprüngliche Reihenfolge der Daten beibehalten. Nach der Ausführung würde die Tabelle nur eindeutige Zeilen basierend auf den Feldern „EmpId“ und „EmpSSN“ enthalten.

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Zeilen 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