Estructuras de control

08/09/2003 - 16:37 por Harold Godefroy | Informe spam
Disculpen la brutalidad, pero no doy con lo que quiero hacer y pues recurro
a los expertos. Lo que quiero hacer me gustaria que corriera en MySQL, sin
embargo no pararle mucho a esto y darme una manita :)

Lo que necesito es recorrer una tabla y actualizar otra segun los valores de
la primera, seria algo mas o menos asi: (Anda que programo en Foxpro, pero
no lo tengo instalado en la empresa ya que aqui trabajo en Delphi)

Do While !EOF(tabla1)
Update tabla2 set campo1=tabla1.campo1 Where tabla2.campo1 = tabla1.campo2
Skip 1 in 'tabla1'
EndDo

Disculpen lo "feo" de la pregunta, pero ando atascado con esto.

Saludos.
T.S.U. Harold Godefroy. Caracas - Venezuela
Coordinador Portalfox Venezuela
http://venezuela.portalfox.com
h a r o l d g o d e f r o y @ p o r t a l f o x . c o m

"Sí, soy un criminal, mi crimen es la curiosidad.
Mi crimen es juzgar a la gente por lo que dice y
piensa, no por lo que parece. Mi crimen es que
soy más listo que tu, algo que no me puedes perdonar."
The Mentor

Preguntas similare

Leer las respuestas

#6 Mariano Alvarez
08/09/2003 - 17:50 | Informe spam
Perdona que no me he dado cuenta que has indicado que usas MySql. Yo no uso
MySql porque es muy limitado aunque economico. Esa instruccin que te he
indicado es correcta si usas T-SQL de SQL Server.

Creo que la sintaxis seria algo asi.

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"Harold Godefroy" wrote in message
news:
Esa sintaxis creo que no es correcta, mi problema creo que radica en esto:
(Tomado de la documentacion de MySQL)

Starting with MySQL Version 4.0.4, you can also perform UPDATE operations
that cover multiple tables:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

Yo tengo MySQL ver 4.0.12

> Saludos.
T.S.U. Harold Godefroy. Caracas - Venezuela
Coordinador Portalfox Venezuela
http://venezuela.portalfox.com
h a r o l d g o d e f r o y @ p o r t a l f o x . c o m

"Sí, soy un criminal, mi crimen es la curiosidad.
Mi crimen es juzgar a la gente por lo que dice y
piensa, no por lo que parece. Mi crimen es que
soy más listo que tu, algo que no me puedes perdonar."
The Mentor

"Mariano Alvarez" escribió en el mensaje
news:
> Te falta el FROM
>
> Update registros
> set COD_CRI = z_criadores.codigo_cri
> from z_criadores -- Te faltaba esta tabla
> Where
> registros.COD_CRI = z_criadores.codigo
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
>
> "Harold Godefroy" wrote in message
> news:eFf%
> > Gracias por responder chicos, a la verdad queria conformacion antes de
> hacer
> > lo que tenia pensado, ya que la tabla tiene mas de 500.000 registros y
es
> > bastante tedioso tener que estar restaurando backups por si algo sale
mal.
> > He puesto la instruccion tal como me lo han corroborado, la cual es la
> > siguiente:
> >
> > Update registros set COD_CRI = z_criadores.codigo_cri Where
> > registros.COD_CRI = z_criadores.codigo
> >
> > Sin embargo ejecute la sentencia (a todo riesgo) y me da un mensaje de
> error
> > que dice: "Unknow table z_criadores in Where clausule". ¿Sera que no


se
> > puede colocar referencias a otras tablas en la clausula where de una
> > sentencia Update?
> >
> > La tabla registros contiene un campo llamado COD_CRI, que contiene el
> codigo
> > de el criador, el problema es que en la tabla existen multiples


codigos
> > COD_CRI diferentes que apuntan a varios registros de criador, pero que


a
> la
> > final son los mismos (lo que varia es que en la descripcion pusieron


el
> > nombre mal escrito, o con acentos, etc). Mi trabajo es normalizar


todos
> esos
> > registros, colocandoles un codigo unico al criador.
> >
> > > > > Saludos.
> > T.S.U. Harold Godefroy. Caracas - Venezuela
> > Coordinador Portalfox Venezuela
> > http://venezuela.portalfox.com
> > h a r o l d g o d e f r o y @ p o r t a l f o x . c o m
> >
> > "Sí, soy un criminal, mi crimen es la curiosidad.
> > Mi crimen es juzgar a la gente por lo que dice y
> > piensa, no por lo que parece. Mi crimen es que
> > soy más listo que tu, algo que no me puedes perdonar."
> > The Mentor
> >
> >
> >
> > "Harold Godefroy" escribió en el mensaje
> > news:OzM%
> > > Disculpen la brutalidad, pero no doy con lo que quiero hacer y pues
> > recurro
> > > a los expertos. Lo que quiero hacer me gustaria que corriera en


MySQL,
> sin
> > > embargo no pararle mucho a esto y darme una manita :)
> > >
> > > Lo que necesito es recorrer una tabla y actualizar otra segun los
> valores
> > de
> > > la primera, seria algo mas o menos asi: (Anda que programo en


Foxpro,
> pero
> > > no lo tengo instalado en la empresa ya que aqui trabajo en Delphi)
> > >
> > > Do While !EOF(tabla1)
> > > Update tabla2 set campo1=tabla1.campo1 Where tabla2.campo1 > > > tabla1.campo2
> > > Skip 1 in 'tabla1'
> > > EndDo
> > >
> > > Disculpen lo "feo" de la pregunta, pero ando atascado con esto.
> > >
> > > > > > > Saludos.
> > > T.S.U. Harold Godefroy. Caracas - Venezuela
> > > Coordinador Portalfox Venezuela
> > > http://venezuela.portalfox.com
> > > h a r o l d g o d e f r o y @ p o r t a l f o x . c o m
> > >
> > > "Sí, soy un criminal, mi crimen es la curiosidad.
> > > Mi crimen es juzgar a la gente por lo que dice y
> > > piensa, no por lo que parece. Mi crimen es que
> > > soy más listo que tu, algo que no me puedes perdonar."
> > > The Mentor
> > >
> > >
> > >
> >
> >
>
>



Respuesta Responder a este mensaje
#7 Fernando España
08/09/2003 - 17:55 | Informe spam
SQL Server no procesa los registros uno por uno si no por lotes
puedes substituir todo ese codigo de VFP con esta instuccion.


Update tabla2 set campo1=tabla1.campo1 Where tabla2.campo1 = tabla1.campo2

no necesitas instruccion adicional

Fernando España
"Harold Godefroy" wrote in message
news:OzM%
Disculpen la brutalidad, pero no doy con lo que quiero hacer y pues


recurro
a los expertos. Lo que quiero hacer me gustaria que corriera en MySQL, sin
embargo no pararle mucho a esto y darme una manita :)

Lo que necesito es recorrer una tabla y actualizar otra segun los valores


de
la primera, seria algo mas o menos asi: (Anda que programo en Foxpro, pero
no lo tengo instalado en la empresa ya que aqui trabajo en Delphi)

Do While !EOF(tabla1)
Update tabla2 set campo1=tabla1.campo1 Where tabla2.campo1 tabla1.campo2
Skip 1 in 'tabla1'
EndDo

Disculpen lo "feo" de la pregunta, pero ando atascado con esto.

> Saludos.
T.S.U. Harold Godefroy. Caracas - Venezuela
Coordinador Portalfox Venezuela
http://venezuela.portalfox.com
h a r o l d g o d e f r o y @ p o r t a l f o x . c o m

"Sí, soy un criminal, mi crimen es la curiosidad.
Mi crimen es juzgar a la gente por lo que dice y
piensa, no por lo que parece. Mi crimen es que
soy más listo que tu, algo que no me puedes perdonar."
The Mentor



Respuesta Responder a este mensaje
#8 ulises
08/09/2003 - 19:31 | Informe spam
Si utilizas T-SQL del SQL Server podrías usar lo
siguiente :

update registros
set COD_CRI = ( SELECT codigo_cri FROM z_criadores WHERE
registros.COD_CRI = z_criadores.codigo)

la cual actualiza COD_CRI con los valores de la segunda
tablas o con nulos si no lo encuentra.

en MySQL 4.0 tienes que usar :

Update registros, z_criadores
set COD_CRI = z_criadores.codigo_cri
Where registros.COD_CRI = z_criadores.codigo

pero no actualizará el campo COD_CRI con nulos sino lo
encuentra en la otra tabla, si deseas eso vas a tener que
implementar otra sentencia adicional.

En MySQL 4.1 si se permite subconsultas, pero todavía esta
en desarrollo aunque lo puedes desacargar de la página de
MySQL si lo deseas.

Saludos,
Ulises

...
He puesto la instruccion tal como me lo han corroborado,


la cual es la
siguiente:

Update registros set COD_CRI = z_criadores.codigo_cri


Where
registros.COD_CRI = z_criadores.codigo

Sin embargo ejecute la sentencia (a todo riesgo) y me da


un mensaje de error
que dice: "Unknow table z_criadores in Where


clausule". ...
Respuesta Responder a este mensaje
#9 Harold Godefroy
08/09/2003 - 19:40 | Informe spam
Ya encontre la sentencia correcta, solo faltaba el nombre de la segunda
tabla en el set:

Update registros,z_criadores set COD_CRI = z_criadores.codigo_cri Where
registros.COD_CRI = z_criadores.codigo


Saludos.
T.S.U. Harold Godefroy. Caracas - Venezuela
Coordinador Portalfox Venezuela
http://venezuela.portalfox.com
h a r o l d g o d e f r o y @ p o r t a l f o x . c o m

"Sí, soy un criminal, mi crimen es la curiosidad.
Mi crimen es juzgar a la gente por lo que dice y
piensa, no por lo que parece. Mi crimen es que
soy más listo que tu, algo que no me puedes perdonar."
The Mentor



"Harold Godefroy" escribió en el mensaje
news:OzM%
Disculpen la brutalidad, pero no doy con lo que quiero hacer y pues


recurro
a los expertos. Lo que quiero hacer me gustaria que corriera en MySQL, sin
embargo no pararle mucho a esto y darme una manita :)

Lo que necesito es recorrer una tabla y actualizar otra segun los valores


de
la primera, seria algo mas o menos asi: (Anda que programo en Foxpro, pero
no lo tengo instalado en la empresa ya que aqui trabajo en Delphi)

Do While !EOF(tabla1)
Update tabla2 set campo1=tabla1.campo1 Where tabla2.campo1 tabla1.campo2
Skip 1 in 'tabla1'
EndDo

Disculpen lo "feo" de la pregunta, pero ando atascado con esto.

> Saludos.
T.S.U. Harold Godefroy. Caracas - Venezuela
Coordinador Portalfox Venezuela
http://venezuela.portalfox.com
h a r o l d g o d e f r o y @ p o r t a l f o x . c o m

"Sí, soy un criminal, mi crimen es la curiosidad.
Mi crimen es juzgar a la gente por lo que dice y
piensa, no por lo que parece. Mi crimen es que
soy más listo que tu, algo que no me puedes perdonar."
The Mentor



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida