DELETAR APENAS 1 REGISTRO

EMANUEL 22/03/2014 21:59:09
#436409
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

NILSONTRES 22/03/2014 22:18:41
#436411
Resposta escolhida
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));

FOXMAN 22/03/2014 22:19:02
#436412
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 :

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.


DANILOPIMENTEL 23/03/2014 15:35:18
#436423
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:

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
EMANUEL 23/03/2014 21:04:26
#436429
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,

OMAR2011 23/03/2014 23:21:38
#436432
Olha cabra,a sql do Nilsontres funciona direito.
Você experimentou.Faça um teste.
EMANUEL 23/03/2014 23:34:34
#436434
é amigo OMAR2011
Realmente a SQL do NILSONTRES funciona perfeitamente, eu que nao tinha visto antes.

Obrigado a todos pela ajuda!

1 abraço!
OMAR2011 24/03/2014 08:37:53
#436436
Mais uma coisa.
Encerra o tópico e pontua o NILSONTRES.
Tópico encerrado , respostas não são mais permitidas