14. november 2013 - 08:47Der 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.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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)
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.
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.
Synes godt om
Ny brugerNybegynder
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.