Buenos días,

 

Santiago muchas gracias, esta solución funcionó bien.

 

Un saludo.

Martha

 

-----Mensaje original-----
De: [email protected] 
[mailto:[email protected]] En nombre de Santiago G Martí
Enviado el: jueves, 25 de febrero de 2010 18:57
Para: forum.help400
Asunto: Re: Consulta Update SQL
Importancia: Baja

 

Suponiendo que tanto ClaveA como ClaveB son las respectivas claves

primarias o únicas de los archivos, la solución sería:

 

 UPDATE archivoA  set campo1 = (select valor1 from archivoB  where

 archivoA .clavea = archivoB.claveb )

      WHERE EXISTS  (select * from archivoB  where archivoA .clavea =

 archivoB.claveb )

 

 

El problema que tiene la instrucción número 5 es que en la subselección se

incluye una unión de ficheros con lo que la condición WHERE no hace

referencia al registro que se pretende actualizar, sino a uno de los

ficheros de la unión, con lo que para cada registro se obtiene un montón de

registros (toda la unión).

La cláusula WHERE EXISTS te protege de lo que ocurre en la instrucción 4,

que existe algún registro en ArchivoA que no tiene correspondencia en

ArchivoB.

 

Finalmente, una recomendación: Por claridad, yo prefiero utilizar ALIAS

para los nombres de los ficheros, ya que clarifican mucho la instrucción:

 

 UPDATE archivoA AA set campo1 = (select valor1 from archivoB BB where   AA

 .clavea = BB.claveb )

      WHERE EXISTS  (select * from archivoB CC where AA.clavea = CC.claveb

 )

 

 

 Saludos,

                   ---------------------------

                     Santiago Martí

                        Dusen, S.A.

                   ---------------------------

 

 

 

 

                                                                           

             "CELUGO -                                                     

             Informatica"                                                  

             <informat...@celu                                        Para 

             go.es>                    "forum.help400"                     

             Enviado por:              <[email protected]>   

             forum.help400-bou                                          cc 

             [email protected]                                             

             os.es                                                  Asunto 

                                       Re: Consulta  Update  SQL           

                                                                           

             25/02/2010 18:14                                              

                                                                           

                                                                           

                Por favor,                                                 

                responda a                                                 

              "forum.help400"                                              

             <forum.help...@li                                             

             stas.combios.es>                                              

                                                                           

                                                                           

 

 

 

 

Hola, Martha.

 

Para mí que la solución es la del punto 5, pero como en ArchivoB tienes más

de un registro con el que actualizar en el ArchivoA deberías acotar la

selección para que sólo te devolviera 1 registro.

 

Un saludo.

 

----- Original Message -----

 From: Gomez Covezdy, Martha

 To: forum.help400

 Sent: Thursday, February 25, 2010 4:56 PM

 Subject: RE: Consulta Update SQL

 

 Buenas tardes,

 

 Hemos intentado las instrucciones siguientes pero para todas el sistema

 responde error:

 

 1. update  archivoA   inner join   archivoB  on  archivoA.ValorA =

 archivoB.ValorB  set  archivoA.valorviejo = archivoB.Valornuevo

 ** Error: "Column qualifier or table   archivoB   undefined."

 

 2. update  archivoA   set    archivoA.valorviejo = archivoB. Valornuevo

 from archivoA  as a inner join   archivoB as b on  a. clavea = b. claveb

 ** Error: "Column qualifier or table   archivoB   undefined."

 

 3. update  archivoA  set archivoA.valorviejo =(select archivoB.Valornuevo

 from archivoB where  archivoA .clavea = archivoB.claveb)

 ** Error: "Null values not allowed in column or variable

 archivoA.valorviejo "

 

 4. update  archivoA  set   archivoA.valorviejo = (select

 value(archivoB.ValorB, 0) from archivoB where   archivoA .clavea =

 archivoB.claveb)

 ** Error: "Null values not allowed in column or variable

 archivoA.valorviejo "

 

 5. UPDATE archivoA  set campo1 =(select valor1 from archivoB, archivoA

 where   archivoA .clavea = archivoB.claveb )

 ** Error: "Result of SELECT more than one row"

 

 

 La Version de OS400 que usamos es:  V5R4M5.

 

 Gracias

 Un saludo.

 Martha

 

 

 De: [email protected]

 [mailto:[email protected]] En nombre de Yosia,

 Marcelo

 Enviado el: jueves, 25 de febrero de 2010 15:12

 Para: 'forum.help400'

 Asunto: RE: Consulta Update SQL

 Importancia: Baja

 

 Prueba con esta sentencia

 

 update archivo a

 set campo1 = (select value(b.campo1, 0) from archivo b where

                          a.clave=b.clave),

       campo2 = 0,

       campo3 = (select value(c.campo1, 0) from archivo c where

                          a.clave=c.clave)

 where condicion

 

 En el ejemplo campo1 y campo3 son actualizados con una subconsulta sobre

 otro archivo que debe retornar 1 solo registro:

 Si retorna más de un registro da error.

 Si retorna 0 registros devuelve null y da error al asignar null a un campo

 que no lo permite (la instrucción value evita eso forzando el cero).

 

 

 Marcelo Yosia

 www.mercantilandina.com.ar

 

 

 

 

 

  -----Mensaje original-----

 De: [email protected]

 [mailto:[email protected]]en nombre de Gomez

 Covezdy, Martha

 Enviado el: Jueves, 25 de Febrero de 2010 10:58 a.m.

 Para: [email protected]

 Asunto: Consulta Update SQL

 Importancia: Alta

       Por favor orientarnos sobre cómo poder hacer en AS400 con SQL un

       UPDATE de un campo de un fichero desde un campo de otro fichero.

       Hemos intentado la siguiente sintaxis pero presenta error:

 

       update  archivoA   inner join   archivoB  on  archivoA.ValorA =

       archivoB.ValorB

       set    archivoA.valorviejo = archivoB. valornuevo

 

       Error: Keyword INNER not expected.

 

       Gracias

       Un saludo.

       Martha

 

 

 

 

 

 

 ____________________________________________________

 © Publicaciones Help400, S.L. - Todos los

 derechos reservados http://www.help400.es

 ----------------------------------------------------

 Para darte de baja visita la siguente URL:

 http://listas.combios.es/mailman/listinfo/forum.help400

 ____________________________________________________

 © Publicaciones Help400, S.L. - Todos los

 derechos reservados http://www.help400.es

 ----------------------------------------------------

 Para darte de baja visita la siguente URL:

 http://listas.combios.es/mailman/listinfo/forum.help400

 

____________________________________________________

© Publicaciones Help400, S.L. - Todos los

derechos reservados http://www.help400.es

----------------------------------------------------

Para darte de baja visita la siguente URL:

http://listas.combios.es/mailman/listinfo/forum.help400

____________________________________________________
© Publicaciones Help400, S.L. - Todos los
derechos reservados http://www.help400.es
----------------------------------------------------
Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a