PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Löschen Sie doppelte Zeilen aus der Tabelle

Sie können dies mehrmals versuchen :

delete from mytable where id in (
    select max(id)
      from mytable
     group by name
    having count(1) > 1
);

Wo mehrmals entspricht der maximalen Anzahl von Wiederholungen, die Sie in name haben Spalte.

Andernfalls können Sie diese komplexere Abfrage versuchen:

delete from mytable where id in (
    select id from mytable
    except 
    (
    select min(id)
      from mytable
     group by name
    having count(1) > 1
    union all
    select min(id)
      from mytable
     group by name
    having count(1) = 1
    )
);

Wenn Sie diese Abfrage nur einmal ausführen, sollte alles gelöscht werden, was Sie benötigen. Habe es aber noch nicht ausprobiert...