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

Hvordan sletter man duplikerede poster?

Nogle af disse tilgange virker lidt komplicerede, og jeg gør det generelt som:

Givet tabel table , ønsker at unikke den på (felt1, felt2) ved at beholde rækken med maks. felt3:

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

For eksempel har jeg en tabel, user_accounts , og jeg vil tilføje en unik begrænsning på e-mail, men jeg har nogle dubletter. Sig også, at jeg vil beholde den senest oprettede (maks. id blandt dubletter).

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Bemærk - USING er ikke standard SQL, det er en PostgreSQL-udvidelse (men en meget nyttig), men det originale spørgsmål nævner specifikt PostgreSQL.


  1. Ingen form for databasecaching for at reducere duplikerede databaseforespørgsler.

  2. Indstil postgresql-skemasti permanent

  3. Flere showplan-forbedringer? Ja tak!

  4. Sådan konverteres en streng til et tidsstempel i PostgreSQL