Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2007
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
Gracias maeyanes, lo he probado y me va de puta madre me has ahorrado un monton de tiempo. Cuando vengas por Málaga tienes barra libre pagada.

Saludos
Responder Con Cita
  #2  
Antiguo 28-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Aún asi, creo que en FireBird esta haciendo falta algo (Si es que ya no existe y no me he dado cuenta), ¿Que sucederia si queremos actualizar varios campos de esta manera?, abria que hacer lo siguiente:

Código SQL [-]
update ventas_new a set a.nombre = (select b.nombre from ventas_old b where b.id = a.id), a.apellido = (select b.apellido from ventas_old b where b.id = a.id)

Esto debe ser muy lento... deberia existir una manera de hacerlo diferente... como creo que lo he visto en otros motores, algo como:

Código SQL [-]
update ventas_new a set a.nombre = b.nombre, a.apellido=b.apellido 
from inner join ventas_old b on (b.id = a.id)

No se, quizá es una idea loca y hasta sin sentido, como quizá sea algo que he observado en algún otro lugar, pero creo que deberia existir.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 28-11-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Yo siempre he usado el update de esa forma y siempre me ha resultado bien... por eso me extrañó que me dijeras que se repetiría lo mismo en todos los registros...

Y si, en algunas ocasiones puede ser lento... sobre todo si son tablas muy grandes...



Saludos...
Responder Con Cita
  #4  
Antiguo 28-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Yo siempre he usado el update de esa forma y siempre me ha resultado bien... por eso me extrañó que me dijeras que se repetiría lo mismo en todos los registros...
Bueno, como dicen por ahí, "La practica hace al maestro"
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 28-11-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Código SQL [-]update ventas_new a set a.nombre = b.nombre, a.apellido=b.apellido
from inner join ventas_old b on (b.id = a.id)
Creo que jhonny está equivocado, o en al final soy yo, porque eso quedaría así:

Código SQL [-]
update ventas_new a set 
a.nombre, a.apellido
values
(Select b.nombre, b.apellido from ventas_old b where (a.id = b.id))
de esta forma solo haríamos una sóla consulta anidada.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 28-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por D&W Ver Mensaje
Creo que jhonny está equivocado, o en al final soy yo, porque eso quedaría así:

Código SQL [-]
update ventas_new a set 
a.nombre, a.apellido
values
(Select b.nombre, b.apellido from ventas_old b where (a.id = b.id))
de esta forma solo haríamos una sóla consulta anidada.
Eso, algo asi estaria bien... repito (si es que no existe ya), en el Insert tambien deberia existir algo por el estilo, aunque la verdad es que siempre que he necesitado algo asi, hago un procedimiento almacenado.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 28-11-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Eso, algo asi estaria bien... repito (si es que no existe ya), en el Insert tambien deberia existir algo por el estilo, aunque la verdad es que siempre que he necesitado algo asi, hago un procedimiento almacenado.
Bueno... en el insert si es posible hacer algo así:

Código SQL [-]
/* Ambas tablas tienen los mismos campos con los mismos nombres */
insert into Tabla1 (select * from Tabla2)

/* Usando nombres de campos */
insert into tabla1 (campo1, campo2) (select campo1, campo2 from Tabla2)


Saludos...
Responder Con Cita
  #8  
Antiguo 28-11-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola!

Es posible esa sintaxis en Firebird?

Por que hasta ahora no he visto ningún documento donde indique que si es posible, y haciendo unas pruebas con Firebird 2, obtuve un error...



Saludos...
Responder Con Cita
  #9  
Antiguo 28-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por maeyanes Ver Mensaje
Hola!

Es posible esa sintaxis en Firebird?

Por que hasta ahora no he visto ningún documento donde indique que si es posible, y haciendo unas pruebas con Firebird 2, obtuve un error...



Saludos...

Ese es el punto... no se puede hacer, pero sería interesante que se pudiera .

En cuanto a lo de la sintaxis que nos muestras sobre el insert, pues te cuento que acabo de hacer una prueba con FB 2.0.3

como la que indicas, pero desafortunadamente con la primero consulta me muestra el siguiente error:

Código SQL [-]
insert into TablaPrueba (select * from TablaPrueba2) /*Tienen la estructura igual*/

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 26.
select.

y con la segunda, lo siguiente:

Código SQL [-]
insert into TablaPrueba (codigo, descripcion) (select codigo, descripcion from TablaPrueba2)

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 48.
(.


Sinceramente, recuerdo vagamente que alguna vez hice algo como lo que indicas, pero como ya he comentado, siempre que necesito estas cosas he usado un procedimiento almacenado por lo que ya no recuerdo si la vez que lo hice fue con FB u otro motor .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 28-11-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Bueno... la verdad es que lo hice de memoria...

Revisando la documentación...

Código SQL [-]
insert into Tabla1 (campo1, campo2, campo3)
  select campo1, campo2, campo3 from Tabla2



Saludos...
Responder Con Cita
  #11  
Antiguo 28-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por maeyanes Ver Mensaje
Bueno... la verdad es que lo hice de memoria...

Revisando la documentación...

Código SQL [-]
insert into Tabla1 (campo1, campo2, campo3)
  select campo1, campo2, campo3 from Tabla2
Jojojo, es cierto, de nuevo tienes razón , de hecho tambien es cierto lo otro, asi:

Código SQL [-]
insert into Tabla1 select * from Tabla2

Una solución por el estilo debe tener lo del Update con una sola subconsulta que he planteado mas arriba , pero ni la encuentro y/o ni la recuerdo .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



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
actualizar datos de una tabla según datos de otra. GustavoCruz SQL 10 01-06-2007 23:18:44
Actualizar un campo de una tabla con datos que se encuentran en otra tabla Morphine SQL 4 15-12-2006 22:47:42
Actualizar una tabla con una consulta de otra tabla JODELSA SQL 2 14-09-2006 04:07:01
Actualizar tabla con datos de otra tabla ElDioni SQL 2 02-05-2006 16:04:04
Problema al hacer un update en una tabla con datos de otra Iseberiano SQL 3 08-06-2005 12:32:14


La franja horaria es GMT +2. Ahora son las 18:02:27.


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