sql >> Database >  >> RDS >> Mysql

Dubbele rijen uit een tabel verwijderen

Ja, ervan uitgaande dat u een uniek ID-veld heeft, kunt u alle records verwijderen die hetzelfde zijn, behalve de ID, maar die niet "de minimale ID" hebben voor hun groep van waarden.

Voorbeeldvraag:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

Opmerkingen:

  • Ik heb vrij "Tabel" en "ID" gekozen als representatieve namen
  • De lijst met velden ("Veld1, Veld2, ...") moet alle velden bevatten behalve de ID
  • Dit kan een langzame zoekopdracht zijn, afhankelijk van het aantal velden en rijen, maar ik verwacht dat het in orde is in vergelijking met alternatieven

EDIT:Als je geen unieke index hebt, raad ik je aan om gewoon een automatisch oplopende unieke index toe te voegen. Vooral omdat het een goed ontwerp is, maar ook omdat je de bovenstaande zoekopdracht kunt uitvoeren.



  1. Overeenkomsten en verschillen tussen RANK-, DENSE_RANK- en ROW_NUMBER-functies

  2. Waarom is er een netwerkgerelateerde of instantiespecifieke fout opgetreden bij het tot stand brengen van een verbinding met SQL Server?

  3. Update records in tabel vanuit CTE

  4. Een hint naar PostgreSQL