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

Responder a