PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Supprimer les lignes en double du tableau

Vous pouvez essayer cette exécution plusieurs fois :

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

plusieurs fois est égal au nombre maximum de répétitions que vous avez dans name colonne.

Sinon, vous pouvez essayer cette requête plus complexe :

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
    )
);

L'exécution de cette requête une seule fois devrait supprimer tout ce dont vous avez besoin. Je n'ai pas essayé cependant...