Having count(*) > 1 limit 1; + delete from rawlog

2 respostas
juniorsatanas
Pessoal pesquisando na net, achei este código só que ele da um erro, ele verifica se a tabela tem registro duplicados e apaga .. TUDO QUE EU QUERIA.
create or replace function fixdupes()
	returns void as '
	DECLARE
	d record;
	BEGIN
	   for d in select oid 
	            from rawlog 
	            group by ldate, ltime, doc, ip, method, qs, code, dsize
	            having count(*) > 1 limit 1;
	   loop
	      delete from rawlog  
	      where ldate=d.ldate and ltime=d.ltime and 
	            doc=d.doc and ip=d.ip and method=d.method and
	            qs=d.qs and code=d.code and dsize=d.dsize;
	
	      insert into rawlog values (d.ip, d.ldate, d.ltime, d.method, d.doc,
	         d.qs, d.code, d.dsize);
	   end loop;
	   RETURN;
	END;
	' language 'plpgsql';

aLGUÉM SABE COMO FAZER ISSO ?

2 Respostas

claudiom

neste artigo há algumas técnicas de como fazer isso de forma bem explicada (apesar do db alvo ser sql server, o conceito é o mesmo)

no geral é sempre a mesma coisa: uma coluna (ou +) tem valor duplicado, uma coluna (ou +) tem o critério de desempate (qual fica e qual é excluída) e você faz uma query pra achar quem sai… usa delete em cima delas…

geralmente não é preciso robôs ou atuar linha a linha…

juniorsatanas

Obrigado, mano ! vou tentar refazer para postgres!

Criado 23 de julho de 2010
Ultima resposta 23 de jul. de 2010
Respostas 2
Participantes 2