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 11-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
problemas con Update.

Buenos diass!!

A ver si podeis ayudarme, tengo dos tablas, clientes y repartidores , y necesito hacer un update en un campo de la tabla clientes cuando se cumpla la condición que clientes.cod = repartidores.cod.

El problema viene cuando quiero darle el valor a pelo, no el de un campo de la tabla, sino haría un select sobre el campo y le daría el valor.

update clientes set valor = (select valor form clientes..) where condición.

El problema es cuando el valor quiero darselo yo, no que lo saque de un campo de la tabla.
update clientes set valor ='S' where condición.

Entonces al ser una condición de dos tablas diferentes no me deja. A ver si le encontrais solución.

Lo quiero ejecutar en Firebird 2.0

Gracias
Responder Con Cita
  #2  
Antiguo 11-06-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 21
RolphyReyes Va por buen camino
Talking

Saludos.

Para esa operación puedes hacer un StoredProcedure que contenga las dos sentencias y dependiendo de un valor que le mandes al Procedure ejecute una de ellas.

Me refiero:

Código SQL [-]
CREATE PROCEDURE PRUEBA(CONDICION : VARCHAR; VALOR : VARCHAR)
BEGIN
 IF CONDICION = 'S' THEN
UPDATE TABLA1 SET CAMPO1 = 'S' WHERE CAMPO2 = 1;
ELSE
UPDATE TABLA1 SET CAMPO1 = (SELECT CAMPO1 FROM TABLA2);
END;

Es solo una idea, ese código no es que te vaya a funcionar sino que es la esencia de lo que quiero expresarte.

Hasta luego.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #3  
Antiguo 11-06-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else c5
end
from t2 where condicion)
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #4  
Antiguo 11-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
Lo del procedimiento almacenado, ya lo tenía, gracias, solo me interesaba saber si podía hacer esto en otra sentencia Update.

UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE CLIENTES.COD = REPARTIDORES.COD

No he entendido el segundo post, si puedes explicarmelo..
Responder Con Cita
  #5  
Antiguo 11-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 20
celades1 Va por buen camino
Hola


Código SQL [-]
UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE exists(select null from repartidores 
where CLIENTES.COD = REPARTIDORES.COD)





Saludos
Responder Con Cita
  #6  
Antiguo 12-06-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Cita:
Empezado por celades1 Ver Mensaje
Hola


Código SQL [-]
UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE exists(select null from repartidores 
where CLIENTES.COD = REPARTIDORES.COD)





Saludos
Aunque esta se ejecuta mas rapido.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #7  
Antiguo 11-06-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
[quote=rastafarey;292774]
Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else c5
end
from t2 where condicion)
Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else 'S'
end
from t2 where condicion)
Creo que puedes interpretar la sentencia y usarla a tu manera.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #8  
Antiguo 12-06-2008
sargento elias sargento elias is offline
Miembro
 
Registrado: mar 2008
Posts: 109
Poder: 17
sargento elias Va por buen camino
celades

Por lo que entendido tiene que estar el campo vacío?

El clientes.campo ya tiene valores 'N' y 'S' tu consulta no me da errores, pero no me hace el update. No quiero cambiar todos los 'N' solo los que cumplan la condición.
Responder Con Cita
  #9  
Antiguo 12-06-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 20
celades1 Va por buen camino
Hola

no hagas caso del null simplemente lo que hace el exists es que se updatee siempre que la subconsulta devuelva uno o varios registros o sea que sea cierta.

El
Código SQL [-]
UPDATE CLIENTES cl SET cl.CAMPO = 'S'WHERE exists(select null from repartidores r where cl.COD = r.COD)

El update creo que esta bien a no ser que no te haya entendido bien

Saludos
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
problemas con el UPDATE huwabe78 SQL 7 30-11-2006 14:44:48
urgente problemas con update vero_17jm SQL 2 29-11-2006 11:52:39
Problemas de con UPDATE jmlifi Varios 3 20-05-2005 22:59:42
problemas con el insert y el update tiagor64 SQL 5 16-02-2005 18:46:09
Problemas con Update ramonibk MS SQL Server 2 01-09-2004 15:40:32


La franja horaria es GMT +2. Ahora son las 03:02:28.


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