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

Case en update, varios campos

Estas en el tema de Case en update, varios campos en el foro de Mysql en Foros del Web. Pues bueno, tengo una duda que no logro sacarme, y si que es d lo màs sencilla pero cualquier ayuda viene bien. Pues bien, quiero ...
  #1 (permalink)  
Antiguo 07/09/2011, 14:40
 
Fecha de Ingreso: agosto-2011
Ubicación: Xalapa
Mensajes: 10
Antigüedad: 13 años, 2 meses
Puntos: 0
Case en update, varios campos

Pues bueno, tengo una duda que no logro sacarme, y si que es d lo màs sencilla pero cualquier ayuda viene bien.

Pues bien, quiero hacer un case en un update en SQL para despuès ocuparlo en Visual y de allì utilizarlo en Access, fàcil eeh?

Lo que tengo hasta ahora es la tabla pruebassss, la columna noMES que quiero que sea de la cual se actualice la columna MES, esto es, si en noMES es 1 pues ponga en MES ENERO; y si es 2, FEBRERO, y asì sucesivamente. Aqui esta el SQL que llevo.

str = "UPDATE pruebassss SET MES = CASE
WHEN noMES='1' THEN 'ENERO'
WHEN noMES='2' THEN 'FEBRERO'
....
ELSE 'DICIEMBRE'
END"

Pero por alguna razon siempre me dice que me hace falta un operador y la verdad esque no veo cual sea la razon.

Gracias de antemano!
  #2 (permalink)  
Antiguo 08/09/2011, 02:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Case en update, varios campos

Creo que no se puede ya que intentas leer y escribir en el mismo tiempo y registro...

Pero si me equivoco ya me corregiran....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 09/09/2011, 08:24
 
Fecha de Ingreso: agosto-2011
Ubicación: Xalapa
Mensajes: 10
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Case en update, varios campos

Entonces supongo que la respuesta es no.

Saludos!
  #4 (permalink)  
Antiguo 09/09/2011, 15:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Case en update, varios campos

Hola Yoso:

Si es posible hacer lo que quieres, podrías por ejemplo utilizar un INNER JOIN en el update, sobre la misma tabla para obtener la descripción... me resulta complicado explicarlo con palabras, pero mejor checa el siguiente script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE meses (noMES INT, MES VARCHAR(20));
  2. Query OK, 0 rows affected (0.28 sec)
  3.  
  4. mysql> INSERT INTO meses (noMES) VALUES (1), (2), (3), (11), (12);
  5. Query OK, 5 rows affected (0.10 sec)
  6. Records: 5  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM meses;
  9. +-------+------+
  10. | noMES | MES  |
  11. +-------+------+
  12. |     1 | NULL |
  13. |     2 | NULL |
  14. |     3 | NULL |
  15. |    11 | NULL |
  16. |    12 | NULL |
  17. +-------+------+
  18. 5 rows in set (0.00 sec)
  19.  
  20. mysql> UPDATE meses M1
  21.     -> INNER JOIN (
  22.     -> SELECT noMes, CASE noMes
  23.     -> WHEN 1 THEN 'ENERO'
  24.     -> WHEN 2 THEN 'FEBRERO'
  25.     -> WHEN 3 THEN 'MARZO'
  26.     -> WHEN 11 THEN 'NOVIEMBRE'
  27.     -> WHEN 12 THEN 'DICIEMBRE'
  28.     -> END MES FROM meses
  29.     -> ) M2 ON M1.noMes = M2.noMes
  30.     -> SET M1.MES = M2.MES;
  31. Query OK, 5 rows affected (0.04 sec)
  32. Rows matched: 5  Changed: 5  Warnings: 0
  33.  
  34. mysql> SELECT * FROM Meses;
  35. +-------+-----------+
  36. | noMES | MES       |
  37. +-------+-----------+
  38. |     1 | ENERO     |
  39. |     2 | FEBRERO   |
  40. |     3 | MARZO     |
  41. |    11 | NOVIEMBRE |
  42. |    12 | DICIEMBRE |
  43. +-------+-----------+
  44. 5 rows in set (0.00 sec)

Te recomiendo que leas en el manual acerca de la sintaxis del UPDATE utilizando JOIN's, te puede servir en un futuro.

Dale un vistazo y nos comentas.

Saludos
Leo.

Etiquetas: campos, case, sql, tabla, 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 13:41.