Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo1

num select

Recommended Posts

Ae galera...

Será que alguem pode me explicar esse codigo?

Peguei na net em busca de algo para retirar registros duplicados do BD

 

1.Select para localizar duplicados

 

select campo,campo1,count(*)

from tabela having count(*) > 1

group by campo,campo1

 

2.Como deletar duplicados

 

delete from tab p1

where rowid < (select max(rowid)

from tab1 p2

where p1.primary_key = p2.primary_key);

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummmm pelo o que entendi...

no 1º: verifica quais são os registros com mais de uma ocorrência de acordo com o grupo. ex: verificar quantos registros existem para um nome e sobre, desde que encontre mais de uma ocorrência. na prática.

tabela usuários

id	nome						sobrenome
1	 Maria						Carla
2	 Maria						Carla
3	 Henrique					 Jose
4	 João						 Silva
5	 Jorge						Carlos
6	 João						 Silva
7	 João						 Silva
O resultado da consulta seria algo assim

nome						sobrenome					   count(*)
Maria						Carla								2
João						 Silva								 3
a consulta ficaria assim caso a tabela fosse 'pessoas':

select nome,sobrenome,count(*)

from pessoas

group by nome,sobrenome

having count(*) > 1

a consulta original está com um erro de sintaxe, o having vem depois do group by.

 

Assim sabe-se que são os duplicados.

 

já o 2º: pelo visto ele está consultando o maior ID de determinado campo, e excluindo os menores daquela chave primária (ou que deveria ser). pode usar como exemplo dos nomes.

deve ficar assim pro exemplo:

delete from tab p1
where id < (select max(id)
from tab1 p2
where p1.nome = p2.nome and p1.sobrenome = p2.sobrenome);

mas não sei não... este 2º deve estar faltando algo... p/ mim vai remover registros que não deveria, e além disso está dando erro:

You can't specify target table 'p1' for update in FROM clause

num teste que fiz aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

é..eu nem testei com medo cara!

 

mais o que eu quero deletar é sao emails duplicados, as vezes o registro duplicado nao tem nome, dai com ese select nao acharia duplicidade

certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é..eu nem testei com medo cara!

 

mais o que eu quero deletar é sao emails duplicados, as vezes o registro duplicado nao tem nome, dai com ese select nao acharia duplicidade

certo?

este select foi só um exemplo...

faz o seguinte, posta lá no outro tópico a estrutura da tabela que estão os registros duplicados.

 

talvez ajude mais na montagem da consulta.

 

se você não conseguir usar stored procedure, então talvez seja melhor adaptar a lógica e usar no PHP ou outra linguagem que esteja utilizando....

 

senão vamos ficar respondendo em 2 tópicos praticamente 'iguais'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.