Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 25-abr-2008, 15:34   #1 (permalink)
xcars sólo puede mejorar
 
Avatar de xcars
 
Fecha de Ingreso: mayo-2005
Mensajes: 519
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
__________________
QUE NADIE ME HABLE QUE NO SEA SUBVERSIVO
xcars está desconectado   Responder Citando
Antiguo 26-abr-2008, 00:33   #2 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 589
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-abr-2008 a las 02:48. Razón: solución más fácil
jurena está desconectado   Responder Citando
Antiguo 28-abr-2008, 10:28   #3 (permalink)
xcars sólo puede mejorar
 
Avatar de xcars
 
Fecha de Ingreso: mayo-2005
Mensajes: 519
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
__________________
QUE NADIE ME HABLE QUE NO SEA SUBVERSIVO
xcars está desconectado   Responder Citando
Antiguo 28-abr-2008, 12:51   #4 (permalink)
jurena tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 589
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
jurena está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 22:49.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93