sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tar man bort dubbletter av poster?

Vissa av dessa tillvägagångssätt verkar lite komplicerade, och jag brukar göra det som:

Given tabell table , vill unika den på (fält1, fält2) och behålla raden med maxfält3:

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

Till exempel har jag en tabell, user_accounts , och jag vill lägga till en unik begränsning för e-post, men jag har några dubbletter. Säg också att jag vill behålla den senast skapade (max id bland dubbletter).

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Obs - USING är inte standard SQL, det är en PostgreSQL-tillägg (men en mycket användbar sådan), men den ursprungliga frågan nämner specifikt PostgreSQL.


  1. Möjligt att göra en MySQL främmande nyckel till en av två möjliga tabeller?

  2. 10 SP_EXECUTESQL Gotchas att undvika för bättre dynamisk SQL

  3. Skicka kolumnnamn dynamiskt för en postvariabel i PostgreSQL

  4. Kan du skapa ett index i CREATE TABLE-definitionen?