Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernen Sie doppelte Zeilen basierend auf einem Spaltenwert

Dies ähnelt der Abfrage von Gordon Linoff, jedoch ohne die Unterabfrage:

DELETE t1 FROM table t1
  JOIN table t2
  ON t2.refID = t1.refID
  AND t2.ID < t1.ID

Dies verwendet einen inneren Join, um nur Zeilen zu löschen, in denen es eine andere Zeile mit derselben refID, aber einer niedrigeren ID gibt.

Der Vorteil der Vermeidung einer Unterabfrage besteht darin, einen Index für die Suche verwenden zu können. Diese Abfrage sollte mit einem mehrspaltigen Index auf refID + ID gut funktionieren.