PDA

Ver la Versión Completa : campos null al hacer un update desde un select


gmontes
05-06-2020, 19:20:23
tengo la version firebird 2.1

al hacer un update en ibexpert

update cinve c set c.precio1 = (select l.precio from tlista_precios l where c.codigo=l.codigo and l.lista=1)

los campos en que no coincide c.codigo=l.codigo me los pone en null y se pierde el valor

es decir
tabla cinve

codigo/ precio1
102 10
103 0
104 20


tabla tlista_precios
codigo/ precio/ lista
103 50 1


despues del update la tabla cinve queda

codigo/ precio1
102 null
103 50
104 null

que estoy haciendo mal??

mRoman
05-06-2020, 19:25:56
Seguramente esto te sucede porq "l.precio" está NULL.

tengo la version firebird 2.1

al hacer un update en ibexpert

update cinve c set c.precio1 = (select l.precio from tlista_precios l where c.codigo=l.codigo and l.lista=1)

los campos en que no coincide c.codigo=l.codigo me los pone en null y se pierde el valor

es decir
tabla cinve

codigo/ precio1
102 10
103 0
104 20


tabla tlista_precios
codigo/ precio/ lista
103 50 1


despues del update la tabla cinve queda

codigo/ precio1
102 null
103 50
104 null

que estoy haciendo mal??

Para estos casos usa COALESCE

SELECT COALESCE(MAX( s.sal_consec ),0)
FROM salida s
WHERE s.almacen_id=:v_alm_origen
AND s.articulo_id=:v_art_id

Los campos nulos, los deja en 0 "COALESCE( campo,0)" el 0 se sustituye por nulo.

update cinve c set c.precio1 = (select COALESCE(l.precio,0) from tlista_precios l where c.codigo=l.codigo and l.lista=1)

cloayza
05-06-2020, 21:26:26
En cuanto a la respuesta de la consulta está en lo correcto lo que te entrega.

Ahora para que no asigne null a lo campo precio1 que se está actualizando, te sugiero una pequeña modificación al código proporcionado pór el compañero mRoman...

update cinve c set c.precio1 = COALESCE( (select l.precio from tlista_precios l where c.codigo=l.codigo and l.lista=1), c.precio1)

Saludos cordiales

gmontes
08-06-2020, 19:30:00
entonces es correcto lo que entrega

pense que si el campo c.codigo=l.codigo no coincidian me dejaria el campo c.precio1 con su valor original en lugar de cambiarmelo a null