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');
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
Den Code aufschlüsseln:
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
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!