sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tar man bort dubbletter i en tabell?

Detta kommer att behålla en av dubbletterna:

delete from join_table
where ctid not in (select min(ctid)
                   from join_table
                   group by id1, id2);

Din tabell har ingen unik identifierare som kan användas för att "välja en överlevande". Det är där Postgres ctid är praktiskt eftersom det är en intern unik identifierare för varje rad. Observera att du aldrig ska använda ctid för mer än bara ett påstående. Det är inte en universellt unik sak men för körtiden för ett enstaka uttalande är det bara bra.

Exempel på SQLFiddle:http://sqlfiddle.com/#!15/dabfc/1

Om du vill bli av med alla rader som är duplicerade:

delete from join_table
where (id1, id2) in (select id1, id2
                     from join_table
                     group by id1, id2
                     having count(*) > 1);

Ingen av lösningarna kommer att vara snabb på ett stort bord. Att skapa en ny tabell utan dubbletter som jjanes har visat kommer att gå mycket snabbare om du behöver ett stort antal rader från en stor tabell.



  1. Hur infogar man en post med bara standardvärden?

  2. Django + MySQL - Okänd kodning:utf8mb4

  3. Är det möjligt att räkna alla rader med samma id med COUNT?

  4. Hitta alla postnummer inom angivet avstånd från ett postnummer