sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter av rader från en tabell

Ja, förutsatt att du har ett unikt ID-fält kan du radera alla poster som är samma förutom ID:t, men som inte har "minsta ID" för deras grupp av värden.

Exempelfråga:

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

Anmärkningar:

  • Jag valde fritt "Tabell" och "ID" som representativa namn
  • Fältlistan ("Fält1, Fält2, ...") bör innehålla alla fält utom ID:t
  • Detta kan vara en långsam fråga beroende på antalet fält och rader, men jag förväntar mig att det skulle vara okej jämfört med alternativ

EDIT:Om du inte har ett unikt index, är min rekommendation att helt enkelt lägga till ett automatiskt inkrementellt unikt index. Främst för att det är bra design, men också för att det låter dig köra frågan ovan.



  1. Funktion för att ta bort accenter i postgreSQL

  2. använd kommandot database_name i PostgreSQL

  3. SQL Server Destination vs OLE DB Destination

  4. Entity Framework 6-transaktionsåterställning