Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

update if isnull

Estas en el tema de update if isnull en el foro de Mysql en Foros del Web. saludos, creo que me he atorado en algo que aparentemente es simple, tengo el siguiente update Código: update fsv_pagos_oficiales a, fsv_pagos_no_oficiales b set a.codemp=if(isnull(b.codemp),b.codemp,51) where ...
  #1 (permalink)  
Antiguo 25/04/2008, 15:34
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
update if isnull

saludos, creo que me he atorado en algo que aparentemente es simple, tengo el siguiente update

Código:
update fsv_pagos_oficiales a, fsv_pagos_no_oficiales b
set a.codemp=if(isnull(b.codemp),b.codemp,51)
where a.prestamo_id=b.prestamo_id
es simple, en la tabla llamada fsv_pagos_no_oficiales hay una lista de pagos que contiene un emplado asignado (codemp)
y fsv_pagos_oficiales no tiene este dato default, por lo cual antes de generar algunos reportes deseo que todos aquellos campos que si tengan un codemp en la tabla fsv_pagos_no_oficiales se actualicen con este codemp, y a todas los demas pagos, asignarles el codemp 51.

mas que obvio el codigo esta mal, ya que al poner esta linea
where a.prestamo_id=b.prestamo_id

me esta considerando solo las coincidencias entre ambas tablas, pero yo necesito considerar todo, y las que existan que les ponga el dato correspondiente y las que no les ponga 51, intentare con EXISTS pero si alguien me hehca la mano, se lo agradecere mucho.
saludos
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #2 (permalink)  
Antiguo 26/04/2008, 00:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: update if isnull

Cita:
Iniciado por xcars Ver Mensaje
saludos, creo que me he atorado en algo que aparentemente es simple, tengo el siguiente update

Código:
update fsv_pagos_oficiales a, fsv_pagos_no_oficiales b
set a.codemp=if(isnull(b.codemp),b.codemp,51)
where a.prestamo_id=b.prestamo_id



es simple, en la tabla llamada fsv_pagos_no_oficiales hay una lista de pagos que contiene un emplado asignado (codemp)
y fsv_pagos_oficiales no tiene este dato default, por lo cual antes de generar algunos reportes deseo que todos aquellos campos que si tengan un codemp en la tabla fsv_pagos_no_oficiales se actualicen con este codemp, y a todas los demas pagos, asignarles el codemp 51.

mas que obvio el codigo esta mal, ya que al poner esta linea
where a.prestamo_id=b.prestamo_id

me esta considerando solo las coincidencias entre ambas tablas, pero yo necesito considerar todo, y las que existan que les ponga el dato correspondiente y las que no les ponga 51, intentare con EXISTS pero si alguien me hehca la mano, se lo agradecere mucho.
saludos


Creo que lo que quieres puedes hacerlo en una sola tabla. Imagina que la tabla donde tienes los nulos se llama t2 y el campo campot2
UPDATE `t2` SET campot2 = 51 WHERE campot2 IS NULL

pero comprueba siempre antes haciendo un select

SELECT * FROM t2 WHERE campot2 IS NULL

Si va bien y te muestra los que quieres cambiar, haz el UPDATE...

Eso te cambiará todos los nulos de esa tabla por 51.

A ver si es esto lo que quieres.

Última edición por jurena; 26/04/2008 a las 02:48 Razón: solución más fácil
  #3 (permalink)  
Antiguo 28/04/2008, 10:28
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: update if isnull

creo que no me explique bien, son 2 tablas, no es que lo quiera hacer con 2 tablas...
una tabla contiene una lista de pagos no oficiales, en la cual tenemos identificados provisionalmente que empleado merece una comision por esos pagos, pero luego nos envian los pagos oficiales, estos al venir de una entidad externa, a la empresa, no vienen identificados a que empleado le pertenecen, entonces lo que debo hacer es una comparacion entre ambos, y a la tabla que me contiene los pagos oficiales agregarle el empleado correspondiente, segun la lista que se encuentra en la tabla de pagos no oficiales, para esquematizar un poco:

pagos_no_oficiales
prestamo_id int,
prestamo_deudor varchar(60),
gestor_id int, --> este es el empleado
prestamo_pago decimal(10,2)

pagos_oficiales
prestamo_id int,
prestamo_deudor varchar(60),
prestamo_pago decimal(10,2)

a la tabla de pagos_oficiales le agrego el campo gestor_id para que se logre identificar segun la tabla de pagos_no_oficiales el gestor correspondiente, ya con datos


Código HTML:
<strong>Pagos_no_oficiales</strong>
<table>
<tr><td>Prestamo_id</td><td>gestor_id </td></tr>
<tr><td>126</td><td>1</tr>
<tr><td>1656</td><td>7</tr>
<tr><td>167</td><td>3</tr>
<tr><td>16541</td><td>1</tr>
</table>

<strong>Pagos_oficiales</strong>
<table>
<tr><td>Prestamo_id</td><td>gestor_id </td></tr>
<tr><td>126</td><td>null</tr>
<tr><td>1656</td><td>null</tr>
<tr><td>167</td><td>null</tr>
<tr><td>168</td><td>null</tr>
<tr><td>169</td><td>null</tr>
</table> 
si se fijan bien, el prestamo 168 y 169 no esta en la lista de la pagos no oficiales, por lo cual, a estos se les debe asignar el gestor_id=51 y los demas identificarlos segun los vaya encontrando.. espero haberme explicado mejor
Por el momento lo hago con 2 pasos, un update de lo identificado y luego uno con lo que no identifico.... pero estoy seguro que se puede hacer en un solo paso.. espero ver sus comentarios
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #4 (permalink)  
Antiguo 28/04/2008, 12:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: update if isnull

Prueba esto a ver si va:

UPDATE pagos_oficiales b LEFT JOIN pagos_no_oficiales p ON p.prestamo_id=b.prestamo_id SET b.prestamo_id = 51 WHERE p.prestamo_id IS NULL

Esto, si no me he equivocado, te actualizará los prestamo_id de pagos_no_oficiales con 51 cuando los números no aparezcan como prestamo_id en pagos_oficiales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.