In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

SQL databases
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por jose.luis »

Hola,
Quisiera hacer un UPDATE de una tabla basado en la búsqueda de un resultado
en otra tabla.
Para ello hago una instrucción tal como esta:
Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM
miOtraTabla WHERE ...una condición..) WHERE ...oTraCondicion...
El campo miCampo de miTabla tiene la restricción de no admitir valores NULL
con lo cual si la sub-select no encuentra nada o el valor de miOtroCampo es
NULL el update fallará.
Entonces hice lo siguiente:
Update miTabla Set miTabla.micampo = (SELECT CASE WHEN
miOtraTabla.MiOtroCampo IS NULL THEN 0 ELSE miOtraTabla.MiOtroCampo END AS
ValorCalculado FROM miOtraTabla WHERE ...una condición..) WHERE
....oTraCondicion...
Pero el resultado viene a ser lo mismo: da un error de que el update fallará
por que la columna micampo no admite valores NULL.
¿Alquien puede darme una pista?
Saludos y gracias.
José Luis Capel
PD: Estoy usando SqlServer 2000.
desarrollo
Mensajes: 109
Registrado: Lun Abr 02, 2007 10:12 am

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por desarrollo »

Jose Luis,
Filtra en WHEN que las columnas no sean nulas:
Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM
miOtraTabla WHERE ...una condición.. AND mi_campo IS NOT NULL) WHERE
....oTraCondicion...
Lo malo es que si tienes muchas columnas te vas a hartar de escribir :-P
Saludos
Jose A. Suarez
"José Luis Capel - Aicom" <jose.luis@iaicom.com> escribió en el mensaje
news:46039c89$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> Quisiera hacer un UPDATE de una tabla basado en la búsqueda de un
> resultado en otra tabla.
>
> Para ello hago una instrucción tal como esta:
>
> Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM
> miOtraTabla WHERE ...una condición..) WHERE ...oTraCondicion...
>
> El campo miCampo de miTabla tiene la restricción de no admitir valores
> NULL con lo cual si la sub-select no encuentra nada o el valor de
> miOtroCampo es NULL el update fallará.
>
> Entonces hice lo siguiente:
>
> Update miTabla Set miTabla.micampo = (SELECT CASE WHEN
> miOtraTabla.MiOtroCampo IS NULL THEN 0 ELSE miOtraTabla.MiOtroCampo END AS
> ValorCalculado FROM miOtraTabla WHERE ...una condición..) WHERE
> ...oTraCondicion...
>
> Pero el resultado viene a ser lo mismo: da un error de que el update
> fallará por que la columna micampo no admite valores NULL.
>
> ¿Alquien puede darme una pista?
>
> Saludos y gracias.
> José Luis Capel
> PD: Estoy usando SqlServer 2000.
>
desarrollo
Mensajes: 109
Registrado: Lun Abr 02, 2007 10:12 am

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por desarrollo »

En WHEN, no, en WHERE.... si estare tonto esta mañana....
"Jose A. Suarez" <desarrollo@aseproda.com> escribió en el mensaje
news:46039e5f$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Jose Luis,
>
> Filtra en WHEN que las columnas no sean nulas:
>
> Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM
> miOtraTabla WHERE ...una condición.. AND mi_campo IS NOT NULL) WHERE
> ...oTraCondicion...
>
> Lo malo es que si tienes muchas columnas te vas a hartar de escribir :-P
>
> Saludos
>
>
> Jose A. Suarez
>
>
> "José Luis Capel - Aicom" <jose.luis@iaicom.com> escribió en el mensaje
> news:46039c89$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Hola,
>>
>> Quisiera hacer un UPDATE de una tabla basado en la búsqueda de un
>> resultado en otra tabla.
>>
>> Para ello hago una instrucción tal como esta:
>>
>> Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM
>> miOtraTabla WHERE ...una condición..) WHERE ...oTraCondicion...
>>
>> El campo miCampo de miTabla tiene la restricción de no admitir valores
>> NULL con lo cual si la sub-select no encuentra nada o el valor de
>> miOtroCampo es NULL el update fallará.
>>
>> Entonces hice lo siguiente:
>>
>> Update miTabla Set miTabla.micampo = (SELECT CASE WHEN
>> miOtraTabla.MiOtroCampo IS NULL THEN 0 ELSE miOtraTabla.MiOtroCampo END
>> AS ValorCalculado FROM miOtraTabla WHERE ...una condición..) WHERE
>> ...oTraCondicion...
>>
>> Pero el resultado viene a ser lo mismo: da un error de que el update
>> fallará por que la columna micampo no admite valores NULL.
>>
>> ¿Alquien puede darme una pista?
>>
>> Saludos y gracias.
>> José Luis Capel
>> PD: Estoy usando SqlServer 2000.
>>
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por jose.luis »

José Alfonso,
Veo que has encontrado este fantástico grupo ;-)
>
> Filtra en WHEN que las columnas no sean nulas:
>
Eso ya lo hace el CASE. Si es NULL pone valor 0. El problema creo que
viene cuando la sub-select no encuentra un registro y, por lo tanto,
entiendo que introduce un valor null como respuesta.
Saludos y gracias!
José Luis Capel
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por jose.luis »

Ups...
> Veo que has encontrado este fantástico grupo ;-)
>
Pensaba que estaba en el microsoft.public.es.sqlserver.... (tambien he
'posteado' este mensaje allí).
Saludos,
José Luis Capel
desarrollo
Mensajes: 109
Registrado: Lun Abr 02, 2007 10:12 am

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por desarrollo »

Jose Luis,
Cierto, si no hay datos en la SELECT interna te va a dar problemas en la
externa.
Vas a tener que hacer las comprobaciones enel WHERE de la SELECT extrena,
tambien.
En relacion al CASE, cada cual puede hacer lo que quiera, pero lo suyo es
hacer los filtros que se puedan en el WHERE y dejar el CASE para otras
cosas.
Saludos
Jose A. Suarez
"José Luis Capel - Aicom" <jose.luis@iaicom.com> escribió en el mensaje
news:46039eea$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Alfonso,
>
> Veo que has encontrado este fantástico grupo ;-)
>
>>
>> Filtra en WHEN que las columnas no sean nulas:
>>
>
> Eso ya lo hace el CASE. Si es NULL pone valor 0. El problema creo que
> viene cuando la sub-select no encuentra un registro y, por lo tanto,
> entiendo que introduce un valor null como respuesta.
>
> Saludos y gracias!
> José Luis Capel
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por jose.luis »

José Alfonso,
>
> Cierto, si no hay datos en la SELECT interna te va a dar problemas en la
> externa.
> Vas a tener que hacer las comprobaciones enel WHERE de la SELECT extrena,
> tambien.
>
En el where externo no puedo hacer referencia a campos de la sub-select por
que están fuera del contexto.
Saludos,
José Luis Capel
Biel
Mensajes: 1
Registrado: Vie Mar 23, 2007 10:54 am

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por Biel »

Hola Jose Luis.,
has probado usando NVL (), no existe en todos los motores de base de datos,
en DB2 su equivalente es COALESCE
Update miTabla Set miTabla.micampo = NVL((SELECT miOtraTabla.MiOtroCampo
FROM
miOtraTabla WHERE ...una condición..), OTRO SELEC O VALOR)
WHERE ...oTraCondicion
Saludos desde Mallorca
Biel
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Update miTabla Set miTabla.micampo = (SELECT miOtraTabla.MiOtroCampo FROM miOtraTabla WHERE ...una c

Mensaje por jose.luis »

Biel,
Eso es. En SqlServer la función se llama ISNULL.
Gracias!
Saludos desde Valencia, a orillas del Xúquer :-)
José Luis Capel
"Biel" <bmaimo@piema.info> escribió en el mensaje
news:[email=4603a318@news.xailer.com...]4603a318@news.xailer.com...[/email]
> Hola Jose Luis.,
> has probado usando NVL (), no existe en todos los motores de base de
> datos,
> en DB2 su equivalente es COALESCE
>
> Update miTabla Set miTabla.micampo = NVL((SELECT miOtraTabla.MiOtroCampo
> FROM
> miOtraTabla WHERE ...una condición..), OTRO SELEC O VALOR)
> WHERE ...oTraCondicion
>
> Saludos desde Mallorca
> Biel
>
>
Responder