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

Come eliminare le voci duplicate?

Alcuni di questi approcci sembrano un po' complicati e generalmente lo faccio come:

Data tabella table , vuoi unirlo su (campo1, campo2) mantenendo la riga con il massimo campo3:

DELETE FROM table USING table alias 
  WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
    table.max_field < alias.max_field

Ad esempio, ho una tabella, user_accounts e voglio aggiungere un vincolo univoco all'e-mail, ma ho alcuni duplicati. Dì anche che voglio mantenere quello creato più di recente (id massimo tra i duplicati).

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Nota - USING non è SQL standard, è un'estensione PostgreSQL (ma molto utile), ma la domanda originale menziona specificamente PostgreSQL.