Quando o DBA (ou seja, nós mesmos) não coloca uma constraint (restrição) de valores únicos numa tabela, pode ser que sejam inseridas linhas com valores duplicados. Não dá para colocar um constraint nessa tabela depois que temos linhas duplicadas. É preciso remover essas linhas.
Para remover linhas duplicadas no SQLite use um comando como o seguinte:
DELETE FROM database
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM database
GROUP BY column1, column2
);
O SQLite tem uma coluna especial chamada ROWID que identifica unicamente cada linha numa tabela.
O que o código faz é:
- Agrupa-se a tabela pelas colunas
column1ecolumn2aplicando a funçãoMIN()sobre a colunaROWID; - Então o comando
DELETEapaga as linhas comROWIDsque não estão contidas nessa consulta, ou seja, removemos tudo exceto osROWIDsmínimos para cada valor único agrupado pelas colunascolumn1ecolumn2.
Links: