É fácil encontrar duplicatas com um campo:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Então, se tivermos uma mesa
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Essa consulta nos dará John, Sam, Tom, Tom, porque todos eles têm o mesmo email
.
No entanto, o que eu quero é obter duplicatas com o mesmo email
e name
.
Ou seja, eu quero pegar "Tom", "Tom".
A razão pela qual eu preciso disso: cometi um erro e permiti inserir valores name
e duplicados email
. Agora eu preciso remover / alterar as duplicatas, então preciso encontrá- las primeiro.
sql
duplicates
Alex
fonte
fonte
name
campo no SELECT.Respostas:
Simplesmente agrupe nas duas colunas.
Nota: o padrão ANSI mais antigo é ter todas as colunas não agregadas no GROUP BY, mas isso mudou com a idéia de "dependência funcional" :
O suporte não é consistente:
sql_mode=only_full_group_by
:fonte
>1
=1
tente isto:
RESULTADO:
se você quiser os IDs dos dups, use isto:
RESULTADO:
para excluir as duplicatas, tente:
RESULTADO:
fonte
Tente o seguinte:
fonte
Se você deseja excluir as duplicatas, eis uma maneira muito mais simples de fazer isso do que encontrar linhas pares / ímpares em uma sub-seleção tripla:
E assim, para excluir:
Muito mais fácil de ler e entender IMHO
Nota: O único problema é que você deve executar a solicitação até que não haja linhas excluídas, pois você exclui apenas 1 de cada duplicado a cada vez
fonte
You can't specify target table 'users' for update in FROM clause
Tente o seguinte:
fonte
fonte
Um pouco atrasado para a festa, mas achei uma solução muito legal para encontrar todos os IDs duplicados:
fonte
GROUP_CONCAT
será interrompido após um período predeterminado, portanto você pode não obter todos osid
s.tente este código
fonte
Isso seleciona / exclui todos os registros duplicados, exceto um registro de cada grupo de duplicados. Portanto, a exclusão deixa todos os registros exclusivos + um registro de cada grupo de duplicatas.
Selecione duplicatas:
Excluir duplicatas:
Esteja ciente de quantidades maiores de registros, pois isso pode causar problemas de desempenho.
fonte
Caso você trabalhe com a Oracle, é preferível:
fonte
fonte
Se você deseja ver se há alguma linha duplicada na sua tabela, usei abaixo a Consulta:
fonte
Essa é a coisa mais fácil que eu inventei. Ele usa uma expressão de tabela comum (CTE) e uma janela de partição (acho que esses recursos estão no SQL 2008 e posterior).
Este exemplo localiza todos os alunos com nome e data duplicados. Os campos que você deseja verificar a duplicação estão na cláusula OVER. Você pode incluir outros campos que desejar na projeção.
fonte
fonte
Como podemos contar os valores duplicados ?? ou é repetido 2 vezes ou mais que 2. apenas conte-os, não em grupo.
tão simples quanto
fonte
Usando CTE também podemos encontrar valores duplicados como este
fonte
fonte
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Eu acho que isso funcionará corretamente para pesquisar valores repetidos em uma coluna específica.
fonte
fonte
Isso também deve funcionar, talvez tente.
Especialmente bom no seu caso Se você procurar duplicatas que tenham algum tipo de prefixo ou alteração geral, como, por exemplo, um novo domínio no correio. então você pode usar replace () nessas colunas
fonte
Se você deseja encontrar dados duplicados (por um ou vários critérios) e selecione as linhas reais.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
fonte
fonte
COUNT
semGROUP BY
, a menos que se refira à tabela inteira.Para excluir registros cujos nomes são duplicados
fonte
Para verificar do registro duplicado em uma tabela.
ou
Para excluir o registro duplicado em uma tabela.
ou
fonte
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
fonte
Podemos usar aqui que trabalham em funções agregadas, como mostrado abaixo
Aqui, como dois campos, id_account e dados são usados com Count (*). Portanto, ele fornecerá todos os registros com mais de uma vez os mesmos valores nas duas colunas.
Por alguma razão, erroneamente, tínhamos perdido a adição de restrições na tabela do servidor SQL e os registros foram inseridos duplicados em todas as colunas com o aplicativo front-end. Em seguida, podemos usar a consulta abaixo para excluir a consulta duplicada da tabela.
Aqui, pegamos todos os registros distintos da tabela original e excluímos os registros da tabela original. Novamente, inserimos todos os valores distintos da nova tabela na tabela original e excluímos a nova tabela.
fonte
Você pode tentar isso
fonte
A coisa mais importante aqui é ter a função mais rápida. Também índices de duplicatas devem ser identificados. A junção automática é uma boa opção, mas para ter uma função mais rápida, é melhor encontrar primeiro as linhas que têm duplicatas e depois juntar-se à tabela original para encontrar a identificação das linhas duplicadas. Finalmente, encomende por qualquer coluna, exceto a id, para ter linhas duplicadas próximas uma da outra.
fonte
Você pode usar a palavra-chave SELECT DISTINCT para se livrar das duplicatas. Você também pode filtrar por nome e colocar todos com esse nome em uma tabela.
fonte
O código exato pode variar dependendo se você deseja encontrar linhas duplicadas ou apenas IDs diferentes com o mesmo email e nome. Se id for uma chave primária ou tiver uma restrição exclusiva, essa distinção não existe, mas a pergunta não especifica isso. No primeiro caso, você pode usar o código fornecido em várias outras respostas:
No último caso, você usaria:
fonte