PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Elimina le righe duplicate dalla tabella

Puoi provare a farlo eseguendo più volte :

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

Dove più volte è uguale al numero massimo di ripetizioni che hai in name colonna.

Altrimenti, puoi provare questa query più complessa:

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'esecuzione di questa query una sola volta dovrebbe eliminare tutto ciò di cui hai bisogno. Non l'ho provato però...