DELETAR APENAS 1 REGISTRO
Pessoal. boa noite!
Estou tendo um problema de duplicação de registros na minha tabela, dai gostaria de saber como eu poderia deletar apenas um registro duplicado, o problema é que os registros duplicados são idênticos, tipo:
Codigo Nome
01 Emanuel
01 Emanuel
Teria algum comando que eu pudesse excluir apenas 1 registro?
Obrigado
Estou tendo um problema de duplicação de registros na minha tabela, dai gostaria de saber como eu poderia deletar apenas um registro duplicado, o problema é que os registros duplicados são idênticos, tipo:
Codigo Nome
01 Emanuel
01 Emanuel
Teria algum comando que eu pudesse excluir apenas 1 registro?
Obrigado
Vc até consegue, mas tera que ordenar esses códigos, ou seja o campo codigo não pode se repetir, e pegar o campo Nome ou outro que vc achar melhor como base.
depois faça isso:
DELETE *FROM Tabelacomduplicados WHERE codigo <> (SELECT Max(codigo) AS MaxOfCod FROM Tabelacomduplicados AS Dupe WHERE (Dupe.Nome =Tabelacomduplicados.Nome));
depois faça isso:
DELETE *FROM Tabelacomduplicados WHERE codigo <> (SELECT Max(codigo) AS MaxOfCod FROM Tabelacomduplicados AS Dupe WHERE (Dupe.Nome =Tabelacomduplicados.Nome));
Amigo. Assim como todo rio tem uma nascente , todo problema tem sua raiz.
Se não pode duplicar, o ideal é você saber o porque está duplicando, para matar este problema de uma vez por todas.
Feito isso, poderás rodar um script que irá eliminar todas as duplicidades.....
Algo como :
Esta é uma das diversas formas, mas cuidado. Recomendo fortemente que faça um backup sempre antes de qualquer teste e/ou execução de script.
Outras formas como colocar uma chave primaria no campo que duplica na tabela, forçando a exclusão das duplicidades.
Se não pode duplicar, o ideal é você saber o porque está duplicando, para matar este problema de uma vez por todas.
Feito isso, poderás rodar um script que irá eliminar todas as duplicidades.....
Algo como :
CREATE TABLE tabela_temporaria as SELECT * FROM tabela_com_registros_duplicados WHERE condição_desejada_ou_sem_condição GROUP BY [coluna com os registros duplicados];
DROP TABLE tabela_com_registros_duplicados;
RENAME TABLE tabela_temporaria TO tabela_com_registros_duplicados;
Esta é uma das diversas formas, mas cuidado. Recomendo fortemente que faça um backup sempre antes de qualquer teste e/ou execução de script.
Outras formas como colocar uma chave primaria no campo que duplica na tabela, forçando a exclusão das duplicidades.
Emanuel,
Nesse caso você precisará, primeiramente, decidir qual dos dois registros deseja excluir, se a primeira ocorrência ou se a segunda ocorrência. Suponhamos que você queira excluir a segunda ocorrência desse registro, então você poderá executar o comando abaixo:
Se, por ventura, você desejar excluir todos os registros duplicados de uma só vez, poderá então executar o seguinte comando:
Espero ter ajudado.
[]s
Danilo Pimentel
Nesse caso você precisará, primeiramente, decidir qual dos dois registros deseja excluir, se a primeira ocorrência ou se a segunda ocorrência. Suponhamos que você queira excluir a segunda ocorrência desse registro, então você poderá executar o comando abaixo:
Citação:DELETE REC FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY Codigo, Nome ORDER BY Codigo) DUP
FROM NOME_SUA_TABELA
) REC
WHERE REC.Codigo = [ô]01[ô] AND REC.Nome = [ô]Emanuel[ô] AND REC.DUP = 2
Se, por ventura, você desejar excluir todos os registros duplicados de uma só vez, poderá então executar o seguinte comando:
Citação:DELETE REC FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY Codigo, Nome ORDER BY Codigo) DUP
FROM NOME_SUA_TABELA
) REC
WHERE REC.DUP > 1
Espero ter ajudado.
[]s
Danilo Pimentel
Amigo DANILOPIMENTEL,
Obrigado pela atenção,
tentei usar o segundo comando mas da um erro.
Veja só..
Eu consegui esse comando abaixo, realmente me tras apenas os registros duplicados nos quais pretendo excluir.
[txt-color=#e80000]SELECT NumPed, CodMes, Status
FROM PEDIDOSWEB AS Tmp
GROUP BY Tmp.NumPed, Tmp.CodMes, Tmp.Status
HAVING (((Tmp.Status)=1) AND ((Count(*))>1));[/txt-color]
Agora como eu poderia usar um DELETE junto com esse select acima...
Agradeço antecipadamente,
Obrigado pela atenção,
tentei usar o segundo comando mas da um erro.
Veja só..
Eu consegui esse comando abaixo, realmente me tras apenas os registros duplicados nos quais pretendo excluir.
[txt-color=#e80000]SELECT NumPed, CodMes, Status
FROM PEDIDOSWEB AS Tmp
GROUP BY Tmp.NumPed, Tmp.CodMes, Tmp.Status
HAVING (((Tmp.Status)=1) AND ((Count(*))>1));[/txt-color]
Agora como eu poderia usar um DELETE junto com esse select acima...
Agradeço antecipadamente,
Olha cabra,a sql do Nilsontres funciona direito.
Você experimentou.Faça um teste.
Você experimentou.Faça um teste.
é amigo OMAR2011
Realmente a SQL do NILSONTRES funciona perfeitamente, eu que nao tinha visto antes.
Obrigado a todos pela ajuda!
1 abraço!
Realmente a SQL do NILSONTRES funciona perfeitamente, eu que nao tinha visto antes.
Obrigado a todos pela ajuda!
1 abraço!
Mais uma coisa.
Encerra o tópico e pontua o NILSONTRES.
Encerra o tópico e pontua o NILSONTRES.
Tópico encerrado , respostas não são mais permitidas