sql >> Database >  >> RDS >> PostgreSQL

Hoe dubbele vermeldingen verwijderen?

Sommige van deze benaderingen lijken een beetje ingewikkeld, en ik doe dit over het algemeen als:

Gegeven tabel table , wil het uniek maken op (field1, field2) en de rij met max field3 behouden:

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

Ik heb bijvoorbeeld een tabel, user_accounts , en ik wil een unieke beperking voor e-mail toevoegen, maar ik heb enkele duplicaten. Zeg ook dat ik de meest recent gemaakte wil behouden (max. id onder duplicaten).

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Opmerking - USING is geen standaard SQL, het is een PostgreSQL-extensie (maar wel een zeer bruikbare), maar de oorspronkelijke vraag vermeldt specifiek PostgreSQL.


  1. Problemen oplossen AlwaysOn - Soms zijn er veel paar ogen nodig

  2. Oracle ODP.Net en EF CodeFirst - SaveChanges-fout

  3. Fix "ERROR 1136 (21S01):Kolomtelling komt niet overeen met waardetelling in rij 2" bij gebruik van de VALUES-instructie in MySQL

  4. Hoe kan ik Opgeslagen procedure in een weergave aanroepen?