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 25-10-2012
rg5820 rg5820 is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 7
Poder: 0
rg5820 Va por buen camino
update con tablas relacionadas

Buenas Tardes.
Tengo 2 tablas en una base firebird
La tabla Articulos y la tabla Items.
La tabla Articulos utiliza el campo Articulos.FK_Items para relacionarse con la tabla Items a travez de Items.ID
La relacion entre Articulos e Items es 1 a 1
Necesito actualizar un campo de la tabla Articulos colocando un valor fijo para el caso en que el campo codigo de la tabla Items tenga un determinado valor es decir algo similar a esto pero que funcione ya que el error que informa es:
"Error ejecutando SQL:
Dynamic SQL Error SQL ERROR code= -104 Token unknown - line 1, column 43 FROM"

La syntaxis que utilizo es:
Código SQL [-]
update ARTICULOS set CODIGO_SEGUNDO = 'X' from ARTICULOS inner join ITEMS on ARTICULOS.FK_ITEMS = ITEMS.ID where (ITEMS.CODIGO= 'AL494J' or ITEMS.CODIGO='F494P')

Muchas gracias por alguna ayuda disponible.

Última edición por Casimiro Notevi fecha: 25-10-2012 a las 22:53:17.
Responder Con Cita
  #2  
Antiguo 25-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver, intenta algo así:

Código SQL [-]
update ARTICULOS
inner join ITEMS on ARTICULOS.FK_ITEMS = ITEMS.ID
set CODIGO_SEGUNDO = 'X'
where (ITEMS.CODIGO= 'AL494J' or ITEMS.CODIGO='F494P')

Así sería en MySQL. Crucemos los dedos porque también lo sea en Firebird.

// Saludos
Responder Con Cita
  #3  
Antiguo 25-10-2012
rg5820 rg5820 is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 7
Poder: 0
rg5820 Va por buen camino
Por el momento continua dando un mensaje de error.
"Error ejecutando SQL:
Dynamic SQL Error SQL ERROR code= -104 Token unknown - line 2, column 1 INNER"

Muchas Gracias por comunicarte.
Responder Con Cita
  #4  
Antiguo 25-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Entonces intenta esto:

Código SQL [-]
update ARTICULOS
set CODIGO_SEGUNDO = 'X'
where (select CODIGO from ITEMS where ARTICULOS.FK_ITEMS = ITEMS.ID) in  ('AL494J', 'F494P')

// Saludos
Responder Con Cita
  #5  
Antiguo 25-10-2012
rg5820 rg5820 is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 7
Poder: 0
rg5820 Va por buen camino
Esta estuvo perfecta, funcionó según lo esperado.
Gracias por comunicarte y por tu ayuda.
Muchas muchas gracias
Responder Con Cita
  #6  
Antiguo 25-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.056
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que la sintaxis sería más o menos así:

Código SQL [-]
update articulos 
set codigo_segundo  = 'X'
where fk_items exists (select id from items where codigo='AL497J' or codigo='F494F' )
Creo que también puedes cambiar exists por in


EDITO: bueno, no he dicho nada, veo que te ha servido la de Román.

Última edición por Casimiro Notevi fecha: 29-10-2012 a las 22:32:50.
Responder Con Cita
  #7  
Antiguo 26-10-2012
rg5820 rg5820 is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 7
Poder: 0
rg5820 Va por buen camino
Si si, me ha servido lo de Roman pero gracias por tu aporte y por responder Casimiro. porque justamente estaba necesitando realizar
otra actualizacion con las tablas muy similar a la consulta anterior.
Esta vez se trata de colocar en el campo Articulos.Codigo_segundo='U' para todos aquellos registros que en la tabla Items tengan un
left(items.Codigo,1)='U' es decir que su primer caracter sea igual a 'U' y tu propuesta me ha servido ya que he podido colocar la
siguiente syntaxis y funciono muy bien.

update articulos
set articulos.codigo_segundo = 'U'
where articulos.fk_items in (select items.id from items where left(items.codigo,1)='U' )

Muchisimas gracias.
Muchas gracias por haberte comunicado.
Responder Con Cita
  #8  
Antiguo 26-10-2012
rg5820 rg5820 is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 7
Poder: 0
rg5820 Va por buen camino
Gracias Casimiro, tambien me ha servido tu ayuda para otra actualizacion que necesitaba hacer y no sabia como lograrla.
Muchas Gracias.
Pd. Con firebird me ha funcionado la instruccion utilizando In

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que la sintaxis sería más o menos así:


Código SQL [-]update articulos
set codigo_segundo ) = 'X'
where fk_items exists (select id from items where codigo='AL497J' or codigo='F494F' )




Creo que también puedes cambiar exists por in


EDITO: bueno, no he dicho nada, veo que te ha servido la de Román.
Responder Con Cita
  #9  
Antiguo 29-10-2012
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 20
cointec Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que la sintaxis sería más o menos así:

Código SQL [-]
update articulos 
set codigo_segundo ) = 'X'
where fk_items exists (select id from items where codigo='AL497J' or codigo='F494F' )
Creo que también puedes cambiar exists por in


EDITO: bueno, no he dicho nada, veo que te ha servido la de Román.
Hola, para optimizar la consulta, deberías utilizar 'in' en vez de or, ya que con 'or' no se utilizan índices, cosa que con 'in' sí que ocurre

Código SQL [-]
 exists (select id from items where codigo in('AL497J','F494F' ))
__________________
Un saludo, Jesus García
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
update a dos tablas relacionadas al mismo tiempo thelibmx MS SQL Server 2 14-11-2007 12:08:28
Tablas Relacionadas y SQL Deiv SQL 10 14-08-2007 15:26:33
Update en Tablas Relacionadas gluglu Conexión con bases de datos 0 01-10-2004 19:42:50
Update de campos clave, tablas relacionadas jfleming Conexión con bases de datos 10 26-02-2004 16:55:11
tablas relacionadas y update sql joanajj Conexión con bases de datos 4 05-08-2003 13:17:23


La franja horaria es GMT +2. Ahora son las 09:09:31.


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