Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-09-2012
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Question 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.

Última edición por asdbernardo fecha: 06-09-2012 a las 00:06:51. Razón: etiqueta delphi
Responder Con Cita
  #2  
Antiguo 06-09-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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

Última edición por MartinS fecha: 06-09-2012 a las 04:50:52.
Responder Con Cita
  #3  
Antiguo 08-09-2012
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
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 ..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insert, select bosterito SQL 3 04-08-2008 12:29:28
Como hacer un Select, Insert, Update, Delete en SQL Server BlueSteel MS SQL Server 11 19-07-2007 10:02:42
Insert con Select salvica SQL 8 03-05-2006 22:01:17
insert into tabla values (select *... ¿? jorgesl SQL 15 11-04-2006 21:29:08
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 08:56:35


La franja horaria es GMT +2. Ahora son las 18:06:17.


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