Data Clearing 23. april 2026 2 min

Dubletter-fjernelse i MySQL 8.0

admin
Netassist · 23. apr 2026
Dubletter-fjernelse

Hvordan du identificerer, fjerner og forhindrer duplikerede rækker

📚 Læsetid: 6-8 minutter💾 SQL-eksempler: 7🎬 Video-længde: ~2:45

Hvad skal denne post løse?

Dubletter ødelægger analyser. Én dublet i en customers-tabel betyder at din DSO, revenue-rapportering, eller customer lifetime value-beregning bliver forkert. I denne post viser vi dig 5 metoder til dubletter-fjernelse i MySQL 8.0 — fra identifikation til sikker deletion, med testable strategier.

✨ After læsning kan du:
✓ Identificere dubletter med GROUP BY
✓ Bruge ROW_NUMBER() OVER PARTITION BY
✓ Vælge mellem 5 delete-strategier baseret på use case
✓ Validere resultater med sum-kontrol
✓ Forhindre fremtidigt dubletter med UNIQUE constraints

Del 1: Identifikation — Find dupletter før du sletter

Hvad er en dublet?

En dublet er to eller flere rækker med identiske værdier i én eller flere nøglekolonner. Eksempler:

  • Samme email i customers (bør være unik)
  • Samme ordre-ID + dato i orders (samme transaktion importeret 2x)
  • Samme invoice-nummer med samme beløb (duplet invoice)

Simpel identifikation: Tæl forekomster

Start med at tælle hvor mange gange hver værdi optræder:

SQL

SELECT email, COUNT(*) AS antal_rækker FROM customers GROUP BY email HAVING COUNT(*) > 1 ORDER BY antal_rækker DESC;

emailantal_rækker
john.doe@example.com3
jane.smith@example.com2

Fortolkning: john.doe@example.com optræder 3 gange — mindst 2 er dubletter.

Se de aktuelle dublet-rækker (med ranking)

SQL

SELECT id, email, created_at, ROW_NUMBER() OVER (PARTITION BY email ORDER BY created_at) AS rk FROM customers WHERE email IN ( SELECT email FROM customers GROUP BY email HAVING COUNT(*) > 1 ) ORDER BY email, created_at;

⚠️ Vigtig note: ROW_NUMBER() OVER PARTITION giver hver gruppe sin egen nummerering. Så for hver email starter den fra 1. rk=1 er første forekomst (keep), rk=2+ er dubletter (delete).