Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   campos null al hacer un update desde un select (https://www.clubdelphi.com/foros/showthread.php?t=94714)

gmontes 05-06-2020 19:20:23

campos null al hacer un update desde un select
 
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.

Cita:

Empezado por gmontes (Mensaje 537532)
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

Código SQL [-]
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.

Código SQL [-]
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...

Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 07:52:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi