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

UPDATE de una tabla a otra con condicion

Estas en el tema de UPDATE de una tabla a otra con condicion en el foro de Mysql en Foros del Web. Hola tengo estas dos tablas Tabla 1 Tabla 2 Necesito Actualizar la columna cod y nombre de la tabla 2 de todos los registros que ...
  #1 (permalink)  
Antiguo 15/07/2013, 13:41
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
UPDATE de una tabla a otra con condicion

Hola tengo estas dos tablas

Tabla 1



Tabla 2





Necesito Actualizar la columna cod y nombre de la tabla 2 de todos los registros que tengo con la condicion que la columna 'numero ' de la tabla 2 este entre los valores de la tabla 1

ejemplo la tabla 2 deberia quedarme asi





probe varias formas pero no doy en el clavo, agradezco la ayuda saludos

Última edición por mktalternativa; 15/07/2013 a las 13:59
  #2 (permalink)  
Antiguo 15/07/2013, 15:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: UPDATE de una tabla a otra con condicion

Hola mktalternativa:

Del manual de referencia de MySQL:

Cita:
Puede realizar operaciones UPDATE que cubran varias tablas. La parte table_references lista las tablas involucradas en el join. Su sintaxis se describe ámpliamente en Sección 13.2.7.1, “Sintaxis de JOIN”. Aquí hay un ejemplo:

Cita:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
Este ejemplo muestra un inner join usando el operador coma, pero los comandos UPDATE de múltiples tablas pueden usar cualquier tipo de join permitido en comandos SELECT tales como LEFT JOIN.
En tu post dices esto:

Cita:
probe varias formas pero no doy en el clavo
Pero no nos dices qué fue lo que intentaste hacer Siempre debes incluir el código de aquello que probaste. Si la consulta marca algún error entonces incluir el código/mensaje del error. de esta manera es más fácil mostrarte dónde estás equivocado.

La sentencia que planteas es bastante simple, con un SELECT, sería asi:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +------+------+------------+-------+-------+
  3. | id   | cod  | nombre     | hasta | desde |
  4. +------+------+------------+-------+-------+
  5. |    1 |  123 | nombre uno |     5 |    13 |
  6. |    2 |  321 | nombre 2   |    16 |    25 |
  7. +------+------+------------+-------+-------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM tabla2;
  11. +------+--------+-------------+------+--------+
  12. | id   | numero | descripcion | cod  | nombre |
  13. +------+--------+-------------+------+--------+
  14. |    1 |      7 | nombre uno  | NULL | NULL   |
  15. |    2 |     18 | nombre 2    | NULL | NULL   |
  16. +------+--------+-------------+------+--------+
  17. 2 rows in set (0.00 sec)
  18.  
  19. mysql> SELECT T2.id, T2.numero, T2.descripcion, T1.cod, T1.nombre
  20.     -> FROM tabla2 T2, tabla1 T1
  21.     -> WHERE T2.numero BETWEEN T1.hasta AND T1.desde;
  22. +------+--------+-------------+------+------------+
  23. | id   | numero | descripcion | cod  | nombre     |
  24. +------+--------+-------------+------+------------+
  25. |    1 |      7 | nombre uno  |  123 | nombre uno |
  26. |    2 |     18 | nombre 2    |  321 | nombre 2   |
  27. +------+--------+-------------+------+------------+
  28. 2 rows in set (0.00 sec)
  29.  
  30. mysql> SELECT T2.id, T2.numero, T2.descripcion, T1.cod, T1.nombre
  31.     -> FROM tabla2 T2 INNER JOIN tabla1 T1
  32.     -> ON T2.numero BETWEEN T1.hasta AND T1.desde;
  33. +------+--------+-------------+------+------------+
  34. | id   | numero | descripcion | cod  | nombre     |
  35. +------+--------+-------------+------+------------+
  36. |    1 |      7 | nombre uno  |  123 | nombre uno |
  37. |    2 |     18 | nombre 2    |  321 | nombre 2   |
  38. +------+--------+-------------+------+------------+
  39. 2 rows in set (0.00 sec)

Observa que la tabla final en ambas consultas es el resultado que esperas obtener. Lo único que tienes que hacer es transformar este SELECT en una sentencia UPDATE.

Haz la prueba, si tienes problemas postea lo que intentaste hacer y te ayudamos a afinar la consulta.

NOTA: ¿de casualidad no tienes los límites en orden contrario? es decir, el campo desde debería ser el límite inferior, mientras que el campo HASTA sería el límite superior... ojo con eso

Saludos
Leo.
  #3 (permalink)  
Antiguo 15/07/2013, 15:42
Avatar de othix  
Fecha de Ingreso: mayo-2011
Ubicación: Guatemala
Mensajes: 92
Antigüedad: 12 años, 10 meses
Puntos: 9
Respuesta: UPDATE de una tabla a otra con condicion

Yo lo haria asi:

Código SQL:
Ver original
  1. UPDATE T2
  2.  SET cod = T1.cod , nombre = T1.nombre
  3.  FROM tabla2 T2
  4.  INNER JOIN tabla1 T1 ON T2.numero BETWEEN T1.hasta AND T1.desde
__________________
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."

Etiquetas: sql, table, 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 04:09.