Este artigo explica o processo de realizar a atividade de exclusão do SQL para linhas duplicadas de uma tabela SQL.
Introdução
Devemos seguir certas práticas recomendadas ao projetar objetos no SQL Server. Por exemplo, uma tabela deve ter chaves primárias, colunas de identidade, índices agrupados e não agrupados, restrições para garantir a integridade e o desempenho dos dados. Mesmo nós seguimos as práticas recomendadas e podemos enfrentar problemas como linhas duplicadas. Também podemos obter esses dados em tabelas intermediárias na importação de dados e queremos remover linhas duplicadas antes de realmente inseri-los nas tabelas de produção.
Suponha que sua tabela SQL contenha linhas duplicadas e você deseja remover essas linhas duplicadas . Muitas vezes, enfrentamos esses problemas. Também é uma prática recomendada usar as chaves relevantes, restrições para eliminar a possibilidade de linhas duplicadas, no entanto, se já houver linhas duplicadas na tabela. Precisamos seguir métodos específicos para limpar dados duplicados. Este artigo explora os diferentes métodos para remover dados duplicados da tabela SQL.
Vamos criar um exemplo de tabela Funcionário e inserir alguns registros.
Na tabela, temos um poucos registros duplicados, e precisamos removê-los.
SQL exclui linhas duplicadas usando Group By e tendo cláusula
Neste método, usamos a cláusula SQL GROUP BY para identificar a duplicata linhas. A cláusula Group By agrupa os dados de acordo com as colunas definidas e podemos usar a função COUNT para verificar a ocorrência de uma linha.
Por exemplo, execute a consulta a seguir e obteremos os registros com ocorrência maior que 1 na tabela Funcionário.
Na saída acima, temos dois registros duplicados com ID 1 e 3.
- Emp ID 1 tem duas ocorrências na tabela Employee
- Emp ID 3 tem três ocorrências na tabela Employee
Precisamos manter uma única linha e remova as linhas duplicadas. Precisamos remover apenas linhas duplicadas da tabela. Por exemplo, o EmpID 1 aparece duas vezes na tabela. Queremos remover apenas uma ocorrência dele.
Usamos a função SQL MAX para calcular o id máximo de cada linha de dados.
Na imagem a seguir, podemos ver que o acima, a instrução Select exclui o ID máximo de cada linha duplicada e obtemos apenas o valor mínimo de ID.
Para remover esses dados, substitua o Selecione primeiro com a instrução de exclusão SQL de acordo com a consulta a seguir.
Depois de executar a instrução de exclusão, execute uma seleção em uma tabela de funcionários e obteremos os seguintes registros que não contêm linhas duplicadas.
SQL exclui linhas duplicadas usando Common Table Expressions (CTE)
Podemos usar Common Table Expressions comumente conhecidas como CTE para remover linhas duplicadas no SQL Server. Está disponível a partir do SQL Server 2005.
Usamos uma função SQL ROW_NUMBER e ela adiciona um número de linha sequencial exclusivo para a linha.
No CTE seguinte, ele particiona o dados usando a cláusula PARTITION BY para a coluna, e e gera um número de linha para cada linha.
Na saída, se alguma linha tiver o valor da coluna maior que 1, isso mostra que é uma duplicata linha.
Podemos remover as linhas duplicadas usando o seguinte CTE.
Ele remove as linhas tendo o valor maior que 1
função RANK para SQL deletar linhas duplicadas
Podemos usar a função SQL RANK para remover as linhas duplicadas também. A função SQL RANK fornece um ID de linha exclusivo para cada linha, independentemente da linha duplicada.
Na consulta a seguir, usamos uma função RANK com a cláusula PARTITION BY. A cláusula PARTITION BY prepara um subconjunto de dados para as colunas especificadas e dá a classificação para essa partição.
Na captura de tela, você pode notar que precisamos remover a linha com Classificação maior que um. Vamos remover essas linhas usando a seguinte consulta.
Use o pacote SSIS para SQL excluir linhas duplicadas
O serviço de integração do SQL Server fornece várias transformações, operadores que ajudam administradores e desenvolvedores a reduzir o esforço manual e otimizar as tarefas. O pacote SSIS pode remover as linhas duplicadas de uma tabela SQL também.
Use o operador de classificação em um pacote SSIS para remover linhas duplicadas
Podemos usar um operador de classificação para classificar os valores em uma tabela SQL. Você pode perguntar como a classificação de dados pode remover linhas duplicadas?
Vamos criar o pacote SSIS para mostrar esta tarefa.
- No SQL Server Data Tools, crie um novo pacote de integração.No novo pacote, adicione uma conexão de origem OLE DB
-
Abra o editor de origem OLE DB, configure a conexão de origem e selecione a tabela de destino
-
Clique em Visualizar dados e você pode ver que ainda temos dados duplicados na tabela de origem
-
Adicione um operador Sort da caixa de ferramentas SSIS para a operação de exclusão de SQL e junte-o aos dados de origem
Para a configuração do operador Sort, clique duas vezes nele e selecione as colunas que contêm valores duplicados. Em nosso caso, o valor duplicado está nas colunas,,.
Também podemos usar os tipos de classificação crescente ou decrescente para as colunas. O método de classificação padrão é crescente. Na ordem de classificação, podemos escolher a ordem de classificação das colunas. A ordem de classificação 1 mostra a coluna que será classificada primeiro.
No lado esquerdo inferior, observe uma caixa de seleção Remover linhas com valores de classificação duplicados.
Ele fará a tarefa de remover linhas duplicadas para nós dos dados de origem. Vamos marcar esta caixa de seleção e clicar em ok. Ele executa a atividade de exclusão de SQL no pacote SSIS.
Assim que clicarmos em OK, ele retornará à guia de fluxo de dados, e podemos ver o seguinte pacote SSIS.
Podemos adicionar destinos do SQL Server para armazenar os dados depois de remover as linhas duplicadas. Queremos apenas verificar se o operador de classificação está fazendo a tarefa por nós ou não.
Adicione uma transformação SQL multicast da caixa de ferramentas SSIS conforme mostrado abaixo.
Para visualizar os dados distintos, clique com o botão direito no conector entre Classificar e Multicast. Clique em Ativar visualizador de dados.
O pacote SSIS geral se parece com abaixo.
Execute o pacote para realizar a operação de exclusão de SQL. Ele abre o visualizador de dados de saída Classificar na tarefa de fluxo de dados. Neste visualizador de dados, você pode ver dados distintos após remover os valores duplicados.
Feche isso e o pacote SSIS será exibido com sucesso executado.
Conclusão
Neste artigo, exploramos o processo de SQL deletar linhas duplicadas usando várias formas, como pacote T-SQL, CTE e SSIS. Você pode usar o método no qual se sentir confortável. No entanto, eu sugeriria não implementar esses procedimentos e empacotar os dados de produção diretamente. Você deve testar em um ambiente inferior.
- Autor
- Postagens recentes
Ele é o criador de uma das maiores coleções online gratuitas de artigos sobre um único tópico, com sua série de 50 partes sobre Grupos de Disponibilidade AlwaysOn do SQL Server. Com base em sua contribuição para a comunidade do SQL Server, ele foi reconhecido com vários prêmios, incluindo o prestigioso “Melhor autor do ano” continuamente em 2020 e 2021 na SQLShack.
Raj está sempre interessado em novos desafios, então se você precisar de consultoria ajuda em qualquer assunto abordado em seus escritos, ele pode ser contatado em [email protected]
Veja todas as postagens de Rajendra Gupta
- Executando atualizações de versões principais e secundárias para AWS RDS SQL Server – 29 de janeiro de 2021
- Implantando instâncias AWS RDS PostgreSQL – 27 de janeiro de 2021
- Migração de bancos de dados SQL locais para AWS RDS SQL Server usando AWS DMS – 25 de janeiro , 2021