Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de SQL Insert into + Select + from + Where (https://www.clubdelphi.com/foros/showthread.php?t=80129)

asdbernardo 06-09-2012 00:03:49

Consulta de SQL Insert into + Select + from + Where
 
Buenas tardes gente, como les va? vengo a hacer una consulta.. es la siguiente..

tengo 3 tablas.. Tabla 1 - tabla 2 - tabla 3 con campos similares. y una tabla final

y necesito copiar los campos de cada una de las tablas [1,2,3] e insertarla en un solo registro. en tabla final.
que seria

Tabla final -
registro 1 - campo 1 2 3 4 5 de tabla 1 | campo 1 2 3 4 5 de tabla 2 | campo 1 2 3 4 5 de tabla 3
registro 2 - campo 1 2 3 4 5 de tabla 1 | campo 1 2 3 4 5 de tabla 2 | campo 1 2 3 4 5 de tabla 3

y asi sucesivamente.

tengo esto, con 2 tablas.
Código Delphi [-]
                query1.Close;
                 query1.SQL.Clear;
                 query1.SQL.Add('INSERT INTO importacionfinal (Codigo, NombreAgencia, VentaVikingo, PremioVikingo, PorcentajeVentaVikingo,');
                 query1.SQL.Add(' FechaFinalImportacion, FechaProcesada, VentaLotex, PremioLotex, PorcentajeVentaLotex)');
                 query1.SQL.Add('SELECT agencia.codigo, agencia.nombre,importacionvikingo.Venta,importacionvikingo.Premio,importacionvikingo.PorcentajeVenta  ,');
                 query1.SQL.Add('importacionvikingo.FechaImportacion,importacionvikingo.Fechapase,importacionLotex.Ve  nta,importacionLotex.Premio, importacionLotex.PorcentajeVenta FROM ImportacionVikingo, ImportacionLotex, Agencia');
                 query1.SQL.Add('WHERE ImportacionVikingo.Codigoagencia = agencia.codigo');
                 query1.ExecSQL;

pasa lo siguiente, cuando 1 de las tablas esta vacia, no hace la consulta, pero es lo que quiero evitar; que las tablas sean independiente, pero que los datos se inserten en un solo registro en la tabla final... espero haberme explicado y puedan ayudarme.

Gracias de antemano.. saludos.:confused:

MartinS 06-09-2012 04:46:56

Hola: Estuve mirando tu consulta y me quede pensando... ¿Es necesario que teniendo los datos en la tabla1, tabla2 y tabla3 juntes todo en una tabla4, es decir, estas duplicando registros y eso es como medio innecesario.

Por otra parte puedo indicarte el uso de Join para realizar tu consulta y dependera de cuales valores son los que queres que aparezcan si tienen o no correspondencia. Por ejemplo

Código SQL [-]
Select * From tabla1 left join tabla2 on tabla1Campo = Tabla2Campo

En ese caso trae todos los registros de la tabla1 o sea la de la izquierda tenga correspondencia o no con la tabla derecha y

Código SQL [-]
Select * From tabla1 right join tabla2 on tabla1Campo = Tabla2Campo

es el caso inverso, o sea la de la derecha.

Resultado: suponte que en una tabla cliente la relacionas con deudas por Left join y si ese cliente no tiene registros en deudas los valores a mostrar serian completados con null. Por Ejemplo (lo pongo como codigo para que diferencies los campos).-

Código:

Id    Apellido      Nombres      NroCta        IdCte      Deuda
1      Perez        Roberto        221            1          2300
2    Gomez        Jesus          225          null        null
3    Gonzalez    Juan            227            3          850

Como verás trae todos los clientes teniendo correspondencia o no con la de deudas.-
Con las tres tablas seria
Código SQL [-]
Select * From tabla1 left join tabla2 on tabla1Campo = Tabla2Campo 
                            left join tabla3 on tabla2Campo = Tabla3Campo

Espero que me hallas entendido algo y por ahí resuelves lo que necesitabas. Igualmente me parece poco eficiente que repitas o dupliques los datos en una tabla final (A menos que sea imprescindible para algo).-

Primero proba la consulta a traves del select sin el insert para ver si tenes todos los datos que necesitas y despues realiza las modificaciones para que inserte

Saludos

asdbernardo 08-09-2012 01:06:31

Gracias amigo, por tu respuesta me parece bien lo que planteas, lo que pasa es que como veras son tablas temporales porque trabajo en un modulo de importacion de datos captados a traves de un archivo txt para sistematizar una porcion de trabajo y disminuir el margen de error al tipear valores.. las tablas1,2,3 las vacio cuando la inserto a importacion final que esta compuesta por los campos de t1t2t3, con fecha final de importacion y fecha final del dia, porque debo cerrarlo.. una vez cerrado ya no puedo ingresar mas datos de ese dia por seguridad. y por eso basicamente t1t2t3 son como temporales.. pero probare eso que me escribiste.. lo otro que pense fue en crear 3 tablas finales individuales y las 3 temporales y luego buscaria 1 registro por registro.. pero bueno probare y te cuento como me fue.. muchas gracias.. Saludos.

PD: estoy empezando con sql .. ;)


La franja horaria es GMT +2. Ahora son las 23:12:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi