Um alle Anomalien aufzulisten:
SELECT name, count(*) FROM TableA GROUP BY name HAVING count(*) > 1;
Es gibt ein paar Möglichkeiten, die Dups zu löschen, und Ihr Weg wird stark von der Anzahl der Dups abhängen, die Sie haben.
Siehe hier Fragen Sie also nach Möglichkeiten, diese aus Ihrer Tabelle zu entfernen.
Hier ist die Lösung, die ich dort bereitgestellt habe:
-- Setup for example
create table people (fname varchar(10), lname varchar(10));
insert into people values ('Bob', 'Newhart');
insert into people values ('Bob', 'Newhart');
insert into people values ('Bill', 'Cosby');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Adam', 'Sandler');
-- Show table with duplicates
select * from people;
-- Create table with one version of each duplicate record
create table dups as
select distinct fname, lname, count(*)
from people group by fname, lname
having count(*) > 1;
-- Delete all matching duplicate records
delete people from people inner join dups
on people.fname = dups.fname AND
people.lname = dups.lname;
-- Insert single record of each dup back into table
insert into people select fname, lname from dups;
-- Show Fixed table
select * from people;