Re: Busqueda de duplicados, con demora.

From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Busqueda de duplicados, con demora.
Date: 2007-06-02 12:47:01
Message-ID: 466166C5.4000601@soft-com.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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,
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Cassanelli 2007-06-02 15:41:30 Re: datos de excel a potsgres
Previous Message Alvaro Herrera 2007-06-02 01:37:59 Re: Tiempo al hacer DELETE