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

problema de Update con NULL

Estas en el tema de problema de Update con NULL en el foro de Mysql en Foros del Web. Necesito actualizar una tabla de clientes si los datos han sido cambiados, pero no me actualiza aquellos campos cuyo valor esán nulos (NULL) sql="UPDATE clientes ...
  #1 (permalink)  
Antiguo 22/10/2010, 09:17
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Sonrisa problema de Update con NULL

Necesito actualizar una tabla de clientes si los datos han sido cambiados, pero no me actualiza aquellos campos cuyo valor esán nulos (NULL)

sql="UPDATE clientes SET fono='5555555', fax='5555554' WHERE id=123151 AND (fono<>'5555555' OR fax<>'5555554')

esta instruccion sql funciona siempre y cuando haya un numero de telefono o fax anterior, pero si los campos estan nulos no me aplica el criterio "WHERE" y no me actualiza el registro.

Los campos son de tipo VARCHAR.

Este problema me essta colmando mi paciencia. ¿Cual sera la solución?

Si alguien me pudiera ayudar se lo agredeceria mucho.
  #2 (permalink)  
Antiguo 22/10/2010, 09:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema de Update con NULL

El tema de los NULL es un problema recurrente, y asunto es que la mayoría de los que se inician en BBDD creen que NULL es un dato, y no es así.
NULL es un estado, y se lo define como un puntero a la nada. Como no es un dato sino un estado, los operadores lógicos no funcionan con él, simplemente porque un operador lógico necesita de "algo", y no es el caso.
El tema se soluciona con el uso de funciones especiales que están dedicdas a eso. Lo más simple sería usar IS NULL o IS NOT NULL:
Código MySQL:
Ver original
  1. UPDATE clientes
  2.     SET fono='5555555', fax='5555554'
  3.     id=123151 AND (fono<>'5555555' OR fono IS NULL  OR  fax<>'5555554'  OR fax  IS NULL);

Para mejor análisis, leer el manual de referencia: 3.3.4.6. Trabajar con valores NULL
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/10/2010, 09:42
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: problema de Update con NULL

Gracias por responder tan rápido.

La verdad que ya habia pensado en esa opción, pero al aplicar el "fono<>'555555' OR ISNULL(fono) OR fax<>'5555556' OR ISNULL(fax)' me va actualizar aunque solo haya cambiado solo el telefono, por ejemplo.

Si aplicao este criterio WHERE id=134654 AND (fono<>'555555' OR ISNULL(fono) OR fax<>'' OR ISNULL(fax)) y no he cambiado ninguno de los dos, osea el fono y fax no han cambiado, me lo actualiza igual, porque fax es nulo. (aplica el último criterio). Incluso habia pensado en usar XOR.

Esta SQL se ejecuta en forma automatica dentro de un programa, y la idea es que solo aplique la actualización si se ha cambiado un dato y no siempre.

¿no se si me hago entender?
  #4 (permalink)  
Antiguo 22/10/2010, 09:43
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: problema de Update con NULL

Perdón Seifus, la respuesta que te había dado es la misma que la que dió gnzsoloyo, por eso edito mi mensaje. No termino de entender cual es el criterio para determinar si ha habido cambios en el fono o fax. Tal vez si nos pones algunos datos podría ser más claro.

Saludos
Leo.

Última edición por leonardo_josue; 22/10/2010 a las 09:51 Razón: respuesta repetida
  #5 (permalink)  
Antiguo 22/10/2010, 09:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema de Update con NULL

Si te fijas bien, estoy poniendo los IS NULL (y no la función ISNULL()) en el WHERE, por lo que sólo funcionará si el ID es el pedido y ademas uno de esos dos campos es NULL, si no se cumple la condición inicial, no habrá cambios.
Analiza el ejemplo que te doy y lo verás: Si el ID no es 123151, no sucederá nada. La cláusula AND determina eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/10/2010, 09:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
De acuerdo Respuesta: problema de Update con NULL

Si tienen toda la razó, disculpa. acabo de probar su solución y funciona. Así que les agradesco mucho su respuestas.

La verdad que solo habia analizado la opción en forma mental y no la habia probado, pero funciona.

De nuevo muchas gracias.

Etiquetas: null, update
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 16:47.