Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/07/2013, 12:07
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 múltiples condiciones

Hola AnGuisi:

vayamos por partes... ¿los datos que vas a actualizar para todos los registros es la misma? si es así, lo único que tienes que hacer es poner una condición tipo IN en lugar de una condición de igual


Código MySQL:
Ver original
  1. UPDATE caracteristicas_hardware
  2. SET marca = 'Western Digital',
  3.     modelo = 'WD10',
  4.     SERIAL = ' 544887s78d',
  5.     observaciones_h = '350 GB'
  6.     id_hardware IN ('1', '2', '3', '4', '5') AND
  7.     codigo = '001';

Todos los registros que cumplan la condición quedarían con la misma información que pones en el SET...

ahora bien, si la información que deseas colocar en cada registro es diferente, entonces no puedes hacer la actualización de esta manera... si esta informaicón estuviera contenida por ejemplo en una tabla, podrías hacer de un UPDATE con múltiples tablas... checa el ejemplo:

Código MySQL:
Ver original
  1. mysql> mysql> SELECT * FROM tabla_original;
  2. +-------------+--------+-------+--------+--------+-----------------+
  3. | id_hardware | codigo | marca | modelo | serial | observaciones_h |
  4. +-------------+--------+-------+--------+--------+-----------------+
  5. |           1 | 001    | marca | modelo | serial | observaciones_h |
  6. |           2 | 001    | marca | modelo | serial | observaciones_h |
  7. |           3 | 001    | marca | modelo | serial | observaciones_h |
  8. |           6 | 001    | marca | modelo | serial | observaciones_h |
  9. +-------------+--------+-------+--------+--------+-----------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla_actualizada;
  13. +-------------+--------+-----------------+---------+--------------+-----------------+
  14. | id_hardware | codigo | marca           | modelo  | serial       | observaciones_h |
  15. +-------------+--------+-----------------+---------+--------------+-----------------+
  16. |           1 | 001    | Western Digital | WD10    | 544887s78d   | 350 GB    |
  17. |           2 | 001    | SAMSUNG         | 1234    | 12345asdfg   | 1 T    |
  18. |           3 | 002    | Hitachi         | ISO2013 | qwerty987654 | 3 T    |
  19. +-------------+--------+-----------------+---------+--------------+-----------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> UPDATE tabla_original T1
  23.     -> INNER JOIN tabla_actualizada T2 ON
  24.     ->     T1.id_hardware = T2.id_hardware AND
  25.     ->     T1.codigo = T2.codigo
  26.     -> SET T1.marca = T2.marca,
  27.     ->     T1.modelo = T2.modelo,
  28.     ->     T1.serial = T2.serial,
  29.     ->     T1.observaciones_h = T2.observaciones_h
  30.     -> WHERE
  31.     -> T1.id_hardware IN ('1', '2', '3', '4', '5') AND
  32.     -> T1.codigo = '001';
  33. Query OK, 0 rows affected (0.04 sec)
  34. Rows matched: 2  Changed: 0  Warnings: 0
  35.  
  36. mysql> SELECT * FROM tabla_original;
  37. +-------------+--------+-----------------+--------+------------+-----------------+
  38. | id_hardware | codigo | marca           | modelo | serial     | observaciones_h |
  39. +-------------+--------+-----------------+--------+------------+-----------------+
  40. |           1 | 001    | Western Digital | WD10   | 544887s78d | 350 GB |
  41. |           2 | 001    | SAMSUNG         | 1234   | 12345asdfg | 1 T |
  42. |           3 | 001    | marca           | modelo | serial     | observaciones_h |
  43. |           6 | 001    | marca           | modelo | serial     | observaciones_h |
  44. +-------------+--------+-----------------+--------+------------+-----------------+
  45. 4 rows in set (0.00 sec)

Observa que sólo los dos primeros registros se actualizaron con los valores de la tabla_actualizada... en el caso del id_hardware = 3, este existe en la tabla_actualizada, pero tiene un código distinto, en el caso de id_harware=6 este no existe en la tabla_actualizada.

No sé si esto te sea de ayuda, por favor coméntanos cualquier detalle

Saludos
Leo.