Re: Busqueda de duplicados, con demora.

From: Mario Cassanelli <mcassan(at)speedy(dot)com(dot)ar>
To:
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Busqueda de duplicados, con demora.
Date: 2007-06-02 16:11:40
Message-ID: 466196BC.6000905@speedy.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, hoy estoy con ganas de escribir en la lista, lo he hecho muy poco,
pero como ya estoy trabajando con postgres, intento intercambiar y
aprender,

bueno una de las cosas que no haria es ordernar la tabla,
para no trabajar mas -chapuceria- hacer un indice unico con unique

otra que se me ocurre es hacer una tabla que no contenga lo duplicados
que es lo que me parece estas haciendo,

Yo buscaria primero quienes y cuantos son los que estan duplicados

SELECT id_articulo, count(*)
FROM central.articulo_proveedor As Tmp
GROUP BY id_articulo,id_proveedor HAVING Count(*)>1
And temp.id_proveedor =
central.articulo_proveedor.id_proveedor

Luego si hubiera un registro_id unico que identificara al registro como
unico - valga la redundancia- , los pongo dentro de un in
(reg_id1,reg_34,...,regnn) y los borro y deberia quedar tu tabla arreglada.
Si
id_articulo es serial
id_proveedor es serial en la tabla proveedores
no me doy cuenta en donde se duplicaron..?, con todo respeto..!

ahora si id_articulo es un numero ingresado y no serial, yo a esa tabla
le pondria un art_id serial primary key, para poder identificar como
unicas las filas y si te ocurriera que se te duplico de esta manera
podes arreglarlo mas facil.

Bueno, saludos a todos y a aprender !!!!

Mario
Mar del Plata
Argentina

Oswaldo Hernández escribió:
> Gabriel Hermes Colina Zambra escribió:
>> Estimados amigos de la lista
>>
>> Probe hacer una consulta a una tabla para buscar
>> duplicados de dos campos, id_articulo y id_proveedor
>> para identificar por cuales eran y borrarlos para
>> luego crear un indice unico sobre estos campos, la
>> tabla tiene la relacion del id de mi articulo con el
>> id del articulo en el proveedor y cuenta con 62000
>> registros, un poco mas.
>>
> ...
>> SELECT central.articulo_proveedor.id_articulo,
>> central.articulo_proveedor.id_proveedor,
>> central.articulo_proveedor.id_en_proveedor,
>> central.articulo_proveedor.dto1,
>> central.articulo_proveedor.dto2,
>> central.articulo_proveedor.unidades_x_envase,
>> central.articulo_proveedor.id_imagen INTO dupartprov
>> FROM central.articulo_proveedor
>> WHERE (((central.articulo_proveedor.id_articulo) In
>> (SELECT id_articulo FROM central.articulo_proveedor As
>> Tmp GROUP BY id_articulo,id_proveedor HAVING
>> Count(*)>1 And id_proveedor =
>> central.articulo_proveedor.id_proveedor)))
>> ORDER BY central.articulo_proveedor.id_articulo,
>> central.articulo_proveedor.id_proveedor;
>
> En el select que haces dentro de la clausula where no especificas si
> los campos de agrupamiento pertenecen a la tabla
> 'central.articulo_proveedor' del from principal, o a la misma tabla de
> ese select anidado que tiene el alias Tmp:
>
> select
> ...
> WHERE central.articulo_proveedor.id_articulo) In
> (SELECT id_articulo FROM central.articulo_proveedor As Tmp
> GROUP BY
> id_articulo,id_proveedor
> -- Esto deberia ser: Tmp.id_articulo, Tmp.id_proveedor
> HAVING
> Count(*)>1 And id_proveedor =
> central.articulo_proveedor.id_proveedor)
> -- y esto: Count(*)>1 And Tmp.id_proveedor =
> central.articulo_proveedor.id_proveedor
>
> Es posible que se este liando con eso.
>
>
> De todas formas lo estas complicando mucho, para localizar los
> duplicados te bastaria, y seria mas rapido con algo como esto:
>
> SELECT
> ap.id_articulo,
> ap.id_proveedor,
> max(ap.id_en_proveedor) as id_en_proveedor,
> max(ap.dto1) as dto1,
> max(ap.dto2) as dto2,
> max(ap.unidades_x_envase) as unidades_x_envase,
> max(ap.id_imagen) as id_imagen,
> count(*) as repeticiones
> INTO
> dupartprov
> FROM
> central.articulo_proveedor as ap
> GROUP BY
> ap.id_articulo,
> ap.id_proveedor
> HAVING
> count(*)>1
> ORDER BY
> ap.id_articulo,
> ap.id_proveedor;
>
>
> Saludos,

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2007-06-02 16:38:10 Re: Funcion de fecha al formato standard RFC822
Previous Message manuel lamas 2007-06-02 16:09:28 Funcion de fecha al formato standard RFC822