SQL Server excluir linhas duplicadas

SQL Server excluir linhas duplicadas

Valores duplicados em um banco de dados podem ser um problema ao executar operações altamente precisas. Eles podem levar a um único valor sendo processado várias vezes, contaminando o resultado. Os registros duplicados também ocupam mais espaço do que o necessário, levando a um desempenho lento.

Neste guia, você entenderá como encontrar e remover linhas duplicadas em um banco de dados do servidor SQL.

O básico

Antes de prosseguirmos, o que é uma linha duplicada? Podemos classificar uma linha como uma duplicata se ela contiver um nome e valor semelhantes para outra linha na tabela.

Para ilustrar como encontrar e remover linhas duplicadas em um banco de dados, vamos começar criando dados de amostra, como mostrado nas consultas abaixo:

Use DuplicedB;
Crie usuários de tabela (
identidade id int (1,1) não nula,
nome de usuário Varchar (20),
Email Varchar (55),
Telefone bigint,
Estados Varchar (20)
);
Insira nos usuários (nome de usuário, email, telefone, estados)
Valores ('zero', 'zero@e -mail.para ', 6819693895,' Nova York '),
('Gr33n', '[email protected] ', 9247563872,' Colorado '),
('Shell', 'usuá[email protected] ', 702465588,' Texas '),
('Dwell', '[email protected] ', 1452745985,' Novo México '),
('Gr33n', '[email protected] ', 9247563872,' Colorado '),
('Zero', '[email protected] ', 6819693895,' Nova York ');

Na consulta de exemplo acima, criamos uma tabela contendo informações do usuário. No próximo bloco de cláusula, usamos a inserção na instrução para adicionar valores duplicados à tabela de usuários.

Encontre linhas duplicadas

Depois de termos os dados de amostra de que precisamos, verifique se há valores duplicados na tabela de usuários. Podemos fazer isso usando a função de contagem como:

Selecione nome de usuário, email, telefone, declara, count (*) como count_value do grupo de usuários por nome de usuário, email, telefone, estados com contagem (*)> 1;

O trecho de código acima deve retornar as linhas duplicadas no banco de dados e quantas vezes eles aparecem na tabela.

Um exemplo de saída é como mostrado:

Em seguida, removemos as linhas duplicadas.

Excluir linhas duplicadas

O próximo passo é remover linhas duplicadas. Podemos fazer isso usando a consulta Excluir, como mostrado no exemplo de snippet abaixo:

exclua dos usuários em que não é o ID (selecione MAX (ID) do grupo de usuários por nome de usuário, email, telefone, estados);

A consulta deve afetar as linhas duplicadas e manter as linhas únicas na tabela.

Podemos ver a tabela como:

Selecione * dos usuários;

O valor resultante é como mostrado:

Excluir linhas duplicadas (junção)

Você também pode usar uma declaração de junção para remover linhas duplicadas de uma tabela. Um exemplo de código de consulta de amostra é como mostrado abaixo:

Exclua um dos usuários uma junção interna
(Selecione ID, Rank () Over (Partition by UserName Order by ID) como classificação_ dos usuários)
b em a.id = b.id onde b.classificação_> 1;

Lembre -se de que o uso de junção interna para remover duplicatas pode levar mais tempo do que outras em um extenso banco de dados.

Excluir linha duplicada (row_number ())

A função row_number () atribui um número seqüencial às linhas em uma tabela. Podemos usar essa funcionalidade para remover duplicatas de uma tabela.

Considere a consulta de exemplo abaixo:

Use DuplicedB
Excluir t
DE
(
Selecione *
, duplicate_rank = row_number () sobre (
Partição por id
Ordem por (selecione NULL)
)
De usuários
) Como t
Onde duplicate_rank> 1

A consulta acima deve usar os valores retornados da função row_number () para remover os duplicados. Uma linha duplicada produzirá um valor maior que 1 da função row_number ().

Conclusão

Manter seus bancos de dados limpos removendo linhas duplicadas das mesas é boa. Isso ajuda a melhorar o espaço de desempenho e armazenamento. Usando os métodos neste tutorial, você limpará seus bancos de dados com segurança.