Avatar billede cht22 Professor
14. november 2013 - 08:47 Der er 3 kommentarer og
1 løsning

Sletning af dupletter i MySQL database

Findes der en nem måde at få slettet vare der blevet lagt ind i databasen flere gange?

Det er en database med kolonnerne manufacturerid og productid begge er af typen INT. Jeg kunne have gjort så det ikke var muligt da jeg lavede tabellen, men det fik jeg ikke gjort og nu vil jeg gerne have slettet så der kun er en tilbage af hver. Forskellige producenter kan godt bruge samme varenummer, så det samme varenummer må gerne være der hvis det er forskellige producenter.
14. november 2013 - 11:06 #1
Jeg kender ingen måde automatisk at slette dupletter, men du kan med en query finde de rækker der er mere end en af.  Så kan gå ind og slette dem manuelt.  (Hvis der er nogen der er klogere end mig, så vil jeg lære med.)

Jeg går i det følgende ud fra, at rækker med ens manufactureid OG productid er dupletter.

Første trin er en select giver de værdier der findes mere end en af:

SELECT * FROM mintabel GROUP BY productid, manufactureid HAVING COUNT(*) > 1

Den kan bruges i en mere omfattende select der giver alle rækker der indeholder duplikater.  Du beholder så en af hver og sletter manuelt resten:

SELECT * FROM mintabel a WHERE a.productid IN (SELECT productid FROM mintabel GROUP BY productid, manufactureid HAVING COUNT(*) > 1) AND a.manufactureid IN (SELECT manufactureid FROM mintabel GROUP BY productid, manufactureid HAVING COUNT(*) > 1)
Avatar billede cht22 Professor
14. november 2013 - 12:03 #2
Den første du har skrevet er god nok, så kan jeg søge efter productid og manufactureid bagefter.

Den anden virker ikke. Den giver script timeout.
14. november 2013 - 13:36 #3
Den anden select virkede på den lille test database jeg lavede med ti rækker. 

Alternativt kan du bruge
SELECT * FROM mintabel ORDER BY productid, manufactureid.  Så kan du visuelt søge efter hvor der forekommer flere rækker med samme productid.  Hvis så manufactureid også er ens sletter du en af rækkerne.

Jeg opretter dette som svar, således at, skulle der ikke komme indlæg der er mere nyttige, du kan skride til lukning.
Avatar billede cht22 Professor
14. november 2013 - 14:06 #4
Det sidste du skriver lyder som en meget besværlig metode. Der er ca. 6000 poster i databasen og der var 40 produkter der var blevet lagt ind flere gange, så jeg kunne godt lide den første du skrev:

SELECT * FROM mintabel GROUP BY productid, manufactureid HAVING COUNT(*) > 1

Jeg har fået klaret det på den måde, så du kan lige så godt få point, der er ingen grund til at gøre mere ud af det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester