sql >> Database >  >> RDS >> Mysql

Dubbele vermeldingen in DB repareren (MySQL-bug)

Om alle anomalieën op te sommen:

SELECT name, count(*) FROM TableA GROUP BY name HAVING count(*) > 1;

Er zijn een paar manieren om het verwijderen van de dups aan te pakken en je pad zal sterk afhangen van het aantal dups dat je hebt.

Zie dit DUS vraag naar manieren om die van je tafel te verwijderen.

Hier is de oplossing die ik daar heb gegeven:

-- 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;


  1. MYSQL - Hoe u twee query's samenvoegt om elementen in de tweede query weg te laten (of misschien een betere oplossing?)

  2. Zoek tekstpositie, extraheer tekst en voeg in nieuwe kolom in MySQL

  3. Controleer of de kolom bestaat in de MySQL-tabel via PHP

  4. SQL-prestaties:WHERE versus WHERE(ROW_NUMBER)