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/
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. |