sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminar filas duplicadas de la tabla

Puedes probar esto ejecutándolo varias veces :

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

Donde varias veces es igual al número máximo de repeticiones que tienes en name columna.

De lo contrario, puede intentar esta consulta más compleja:

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

Ejecutar esta consulta una sola vez debería eliminar todo lo que necesita. Aunque no lo he probado...