|
Postada em 04/07/2004 14:07 hs
A idéia que tenho é a seguinte:
Dentro da tabela: Pegue o registro A e compare com o próximo no caso B Se A for igual a B, então apaga, caso contrário vá para o próximo enquanto não chegar ao fim da tabela.
Como posso codificar o código acima usando o D.A.O. ?
|
|
|
|
Geronimo
|
JOINVILLE SC - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/07/2004 15:51 hs
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
|
Postada em 04/07/2004 16:12 hs
Ola meu amigo, Geronimo ! Acontece o seguinte o Macoratti não diz qual o código, no site está da seguinte forma: "2-) A seguir vamos excluir os registros duplicados, usando SQL é claro. A consulta SQL é a seguinte: " Mas qual é o código SQL ?
|
|
|
Geronimo
|
JOINVILLE SC - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/07/2004 16:45 hs
Tente: Comando SQL que remove registros duplicados em uma tabela DELETE FROM Clientes WHERE CODCLI= ANY(SELECT CLIENTES2.CODCLI FROM CLIENTES2 LEFT JOIN (SELECT Min(CODCLI) AS CODCLI, NOME FROM CLIENTES2 GROUP BY NOME) AS Dup ON CLIENTES2.CODCLI = Dup.CODCLI WHERE Dup.CODCLI IS NULL) PS: CLIENTES2 é uma view (ou uma cópia) da tabela CLIENTES.
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
Geronimo
|
JOINVILLE SC - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/07/2004 16:46 hs
ou Comando SQL que mostra todos os registros duplicados em uma tabela : SELECT CLIENTES.CODCLI, CLIENTES.NOME FROM CLIENTES INNER JOIN (SELECT NOME FROM CLIENTES GROUP BY NOME HAVING Count(*)>1) AS Dup ON CLIENTES.NOME = DUP.NOME Outra forma interessante: SELECT * FROM CLIENTES A WHERE EXISTS( SELECT NULL FROM CLIENTES B WHERE B.NOME = A.NOME GROUP BY B.NOME HAVING A.[CODCLI]
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
Geronimo
|
JOINVILLE SC - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/07/2004 18:20 hs
Eventualmente, em uma tabela que não possui chave primária especificada, ocorre a duplicação de registros.
O problema de duplicar um registro inteiro é que não há, via instruções básicas do sql, como manipular apenas um sem estar na verdade manipulando os 2. Por isso que quando este erro ocorre o próprio enterprise manager, que nada mais é que um client do servidor, não consegue mais manipular os registros.
A primeira coisa que se imagina é utilizar um cursor para acessar os registros duplicados e deletar um. Porém existe solução mais simples, veja :
select distinct * into #tabelatmp from tabela truncate table tabela insert into tabela select * from #tabelatmp
Utilizando o distinct na hora de passar os registros para a tabela temporária já eliminamos uma das cópias dos registros duplicados. Apagamos então todo o conteúdo da tabela e trazemos os dados de volta a partir da tabela temporária
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|