Esta usaría Yo.
UPDATE PROJECT P
SET P.LOCATION = (*SELECT* D.LOCATION
FROM DEPARTMENT D
WHERE P.DEPTNO = D.DEPTNO)
Pero DEPARTMENT , No puede tener 2 Registros con el mismo DEPNO, el MERGE
nunca lo Use y quizás sea la solución
.
Cordialmente:
Luis A Bregoli
Tel. 15-4970-9897
email: [email protected]
Sitio: http://www.bregoliluis.com/ <https://www.bregoliluis.com/>
<http://www.prosyde.com>
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Libre
de virus. www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
El lun, 8 mar 2021 a las 14:14, Carlos (<[email protected]>)
escribió:
> Hola
>
> La "norma" es la de SQL de DB2 de i; que dicho así parece una tonteria (y
> seguramente lo sea 😁) pero lo que quiero decir es que es SQL standard con
> adaptaciones para i. El ejemplo a lo mejor lo has sacado de la página de
> DB2 de Z, que también tiene sus diferencias.
>
> En tu sentencia funcionaría con un segundo SELECT (quizá con DISTINCT o
> alguna cláusula para que solo devuelva una fila)
>
> UPDATE PROJECT P
>
> SET P.LOCATION = (*SELECT* D.LOCATION
>
> FROM DEPARTMENT D
>
> WHERE P.DEPTNO = D.DEPTNO);
>
>
> Para buscar en Google yo suelo añadir iseries a las búsquedas para acotar,
> aunque no siempre sirve.
>
> Y como referencia, tienes la documentación de IBM donde también puedes
> encontrar ejemplos (sobre todo en el de programación):
>
> https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/db2/rbafzintro.htm
>
>
> https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/sqlp/rbafykickoff.htm
>
> Saludos
> Carlos
>
>
> El 8/3/21 a las 16:45, estela retes escribió:
>
> Muchas gracias Sergio por tu aclaración.
> Estudiaremos la manera de realizar el merge, ya que parece bastante útil y
> las casuísticas en las que se puede utilizar son muy comunes.
>
> Aún así,me gustaría saber cual es la "norma" de SQL en la que deberíamos
> basarnos en casos como estos, ya que es bastante complicado encontrar ayuda
> que "funcione" googleando sin saber qué debemos tener en cuenta de base.
>
> El ejemplo lo hemos sacado de la web de IBM de DB2 pero NO de DB2 for i, y
> es por eso que nos lleva a error. Tampoco debemos basarnos en la norma de
> SQL server /my sql o cualquier otro, y estaría bien si alguien nos pudiese
> aclarar de dónde partir a la hora de ver la sintaxis o los ejemplos.
>
> Lo dicho, mil gracias!
>
>
>
> On Mon, Mar 8, 2021 at 4:36 PM Sergio Martinez Roig <
> [email protected]> wrote:
>
>> Hola Estela,
>>
>>
>>
>> Para ejecutar este tipo de sentencias update de una tabla en función de
>> otra debes utilizar la estructura MERGE, en el ejemplo que pones tú sería
>> de la siguiente manera:
>>
>>
>>
>> MERGE INTO PROJECT AS P
>>
>> USING (SELECT DEPTNO, LOCATION FROM DEPARTMENT) AS D
>>
>> ON P.DEPTNO = D.DEPTNO
>>
>> WHEN MATCHED THEN UPDATE SET P.LOCATION = D.LOCATION;
>>
>>
>>
>> Hasta dónde yo se un UPDATE no acepta el FROM. Otra cosa que no tengo
>> clara es a partir de que reléase está disponible el MERGE.
>>
>>
>>
>> En este artículo te explica bien el MERGE:
>>
>>
>>
>> https://medium.com/@esteeeban10/merge-en-db2-as400-3ab986c36bef
>>
>>
>>
>> Un saludo
>>
>> Sergio Martínez
>>
>> Estibarna, CPE
>>
>>
>>
>> *De:* Forum.help400 <[email protected]> *En
>> nombre de *estela retes
>> *Enviado el:* lunes, 8 de marzo de 2021 16:16
>> *Para:* forum.help400 <[email protected]>
>> *Asunto:* Norma SQL DB2 en V7R4
>>
>>
>>
>> Buenas a todos,
>>
>>
>>
>> Disculpad por lo básico de la pregunta.
>>
>>
>>
>> Estamos intentando ejecutar unas sentencias SQL de tipo UPDATE desde el
>> Rational (desde STRSQL nos ocurre lo mismo), similares a ésta de un manual
>> de IBM:
>>
>>
>>
>> UPDATE PROJECT P
>>
>> SET P.LOCATION = D.LOCATION
>>
>> FROM DEPARTMENT D
>>
>> WHERE P.DEPTNO = D.DEPTNO;
>>
>>
>>
>> Estamos obteniendo el error:
>>
>> [SQL0199] Palabra clave FROM inesperada. Símbolos válidos: USE SKIP WAIT
>> WITH FETCH LIMIT ORDER WHERE OFFSET.
>>
>>
>>
>> Entendemos que no nos está permitiendo poner una cláusula FROM en una
>> UPDATE y nos gustaría saber porqué nos está rechazando esta sintaxis y en
>> qué "norma" de SQL debemos basarnos a la hora de construir dichas
>> sentencias.
>>
>>
>>
>> Gracias a todos y un saludo.
>>
>>
>>
>> --
>>
>> Estela
>> Este mensaje contiene información confidencial dirigida al destinatario
>> del mismo. Las opiniones expresadas pertenecen al autor y no necesariamente
>> a ESTIBARNA. Si Ud. recibe este mensaje por error, se ruega informe
>> inmediatamente al remitente del mismo. Queda prohibido el uso, divulgación,
>> copia o distribución a terceros de la información incluida en este mensaje.
>> ____________________________________________________
>> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
>> Forum.Help400 © Publicaciones Help400, S.L.
>
>
>
> --
> Estela
>
> ____________________________________________________
> �nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400 � Publicaciones Help400, S.L.
>
> ____________________________________________________
> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400 © Publicaciones Help400, S.L.
____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.