Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/07/2013, 15:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.