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
*****************************************
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 |