Re: Busqueda de duplicados, con demora.

From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Busqueda de duplicados, con demora.
Date: 2007-06-02 21:10:54
Message-ID: 222978.60422.qm@web63714.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Oswaldo Hernández <listas(at)soft-com(dot)es> 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,
> --
> *****************************************
> Oswaldo Hernández
> oswaldo (@) soft-com (.) es
> *****************************************
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 10: visita nuestro canal de IRC #postgresql-es
> en irc.freenode.net
>
Osvaldo, tu propuesta es muy buena de hecho la
consulta asi planteada demora 2 segundos y medio, pero
solo me trae una instancia de los regitros duplicados
poniendome al lado la cantidad de repeticiones,
mientras que en la otra consulta puedo traer las n
instancias de la repeticion.

De todas meneras adaptado un poco esto me sirve
muchisimo.

Atte,
Gabriel Hermes Colina Zambra

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2007-06-02 21:28:49 Re: Busqueda de duplicados, con demora.
Previous Message Gabriel Hermes Colina Zambra 2007-06-02 21:01:29 Rv: Re: Busqueda de duplicados, con demora.