Hola Alvaro Gracias por la pronta respuesta
Alvaro Herrera wrote: Hmm, yo creo que sí funciona y no lo estás usando bien. No tengo tiempo ahora para mirar tu query, pero me parece raro que en el FROM no hagas referencia a insertadetalle, y también me parece raro que hagas referencia directa a maestro cuando deberías hacerlo a base. Lo hice de varias formas: 1. empleando el resultado de insertadetalle 2. con base solo y 3. con base haciendo join con maestro Realice este pequeño laboratorio para presentar la inquietud: create table carga ( identificacion text,nombre text,tarjeta text, telefono text ); insert into carga(identificacion ,nombre ,tarjeta , telefono) values ('1','Juan', 'tarjeta 1', '1234'), ('1','Juan', 'tarjeta 2', '1234'), ('2','German', 'tarjeta 1', '5678'), ('3','Pedro', 'tarjeta 1', '90123'), ('3','Pedro', 'tarjeta 2', '90123'); create table master ( id serial primary key, identificacion text,nombre text, telefono text ); create table detalle ( id serial, tarjeta text, master_id int references master(id) ); create table marcadortelefonia ( id serial, telefono text, master_id int references master(id) ); WITH base AS ( INSERT INTO master (identificacion,nombre, telefono) SELECT a.identificacion,a.nombre,a.telefono FROM carga as a GROUP BY a.identificacion,a.nombre,a.telefono RETURNING id,identificacion ) , insertadetalle AS ( INSERT INTO detalle(tarjeta,master_id) SELECT a.tarjeta,b.id FROM carga as a JOIN base as b on a.identificacion=b.identificacion RETURNING master_id ) INSERT INTO marcadortelefonia ( telefono, master_id ) SELECT b.telefono, a.id *FROM base as a join master as b on a.id <http://a.id>=b.id <http://b.id>* group by b.telefono,a.id; select count(*) from master; -- 3 registros select count(*) from detalle; -- 5 registros select count(*) from marcadortelefonia; -- 0 registros --------------------- -- version 2 --------------------- WITH base AS ( INSERT INTO master (identificacion,nombre, telefono) SELECT a.identificacion,a.nombre,a.telefono FROM carga as a GROUP BY a.identificacion,a.nombre,a.telefono RETURNING id,identificacion ) , insertadetalle AS ( INSERT INTO detalle(tarjeta,master_id) SELECT a.tarjeta,b.id FROM carga as a JOIN base as b on a.identificacion=b.identificacion RETURNING master_id ) INSERT INTO marcadortelefonia ( telefono, master_id ) SELECT b.telefono, a.master_id *FROM insertadetalle as a join master as b on a.master_id=b.id <http://b.id>* group by b.telefono,a.master_id; select count(*) from master; -- 3 registros select count(*) from detalle; -- 5 registros select count(*) from marcadortelefonia; -- 0 registros Muchas gracias!! El 6 de octubre de 2015, 11:11 a. m., Alvaro Herrera<alvhe...@alvh.no-ip.org > escribió: > Francisco Olarte wrote: > > Alvaro, Hellmuth no se si os habies dado cuenta pero estais copiando > > mensaje entre la lista en Español y la general ( es posible que si > > teneis las dos suscritas os haya eliminado los duplicados, yo solo > > tengo la -general en ingles y me han llegado ) > > > > ( Intencionalmente sin copia a las listas, solo FYI ). > > Ups, no me di cuenta :-( > > /me spanks Hellmuth > > Ya que estamos, aprovecho de decir que creo que serías un buen aporte a > la lista en español :-) > > Saludos > > > 2015-10-06 17:51 GMT+02:00 Alvaro Herrera <alvhe...@2ndquadrant.com>: > > > Hellmuth Vargas escribió: > > >> Hola Lista > > >> > > >> Estaba realizando un cargue de un archivo Excel con información de > clientes > > ..... > > > Hmm, yo creo que sí funciona y no lo estás usando bien. No tengo > tiempo > > > ahora para mirar tu query, pero me parece raro que en el FROM no hagas > > ........ > > > -- > Álvaro Herrera PostgreSQL Expert, > http://www.2ndQuadrant.com/ > "Oh, great altar of passive entertainment, bestow upon me thy discordant > images > at such speed as to render linear thought impossible" (Calvin a la TV) > -- Cordialmente, Ing. Hellmuth I. Vargas S. Esp. Telemática y Negocios por Internet Oracle Database 10g Administrator Certified Associate EnterpriseDB Certified PostgreSQL 9.3 Associate