Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/07/2011, 08:51
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Campo que se alimenta de dos tablas

Hola DINASEN:

No nos explicas cómo están relacionadas tus tablas, pero siguiendo la estructura de tus tablas diría que el campo id_tabla2 corresponde justamente al id de la tabla2 y lo mismo para el id_tabla3 correcto???

Para hacer este tipo de actualizaciones debes hacer uso de INNER JOIN'S en el UPDATE, usando las mismas reglas del JOIN en el select, es decir más o menos así:
Código:
UPDATE tabla1 T1 
INNER JOIN Tabla2 t2 on........
INNER JOIN Tabla3 t2 on........
SET T1.-------- = T2.-------- 
Si entendí bien el ejemplo quedaría más o menos así:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE Tabla1 (id INT, nombre VARCHAR (20),
  2.     -> id_tabla2 INT, id_tabla3 INT);
  3. Query OK, 0 rows affected (0.12 sec)
  4.  
  5. mysql> INSERT INTO Tabla1 VALUES (1, 'UNO', 1, 1), (1, 'DOS', 1, 2),
  6.     -> (1, 'TRES', 2, 1), (1, 'CUATRO', 3, 2), (1, 'CINCO', 2, 2);
  7. Query OK, 5 rows affected (0.04 sec)
  8. Records: 5  Duplicates: 0  Warnings: 0
  9.  
  10. mysql> select * from Tabla1;
  11. +------+--------+-----------+-----------+
  12. | id   | nombre | id_tabla2 | id_tabla3 |
  13. +------+--------+-----------+-----------+
  14. |    1 | UNO    |         1 |         1 |
  15. |    1 | DOS    |         1 |         2 |
  16. |    1 | TRES   |         2 |         1 |
  17. |    1 | CUATRO |         3 |         2 |
  18. |    1 | CINCO  |         2 |         2 |
  19. +------+--------+-----------+-----------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql> CREATE TABLE Tabla2 (id INT, nombre VARCHAR (10));
  23. Query OK, 0 rows affected (0.11 sec)
  24.  
  25. mysql> INSERT INTO Tabla2 VALUES (1, 'ONE'), (2, 'TWO'), (3, 'THREE');
  26. Query OK, 3 rows affected (0.08 sec)
  27. Records: 3  Duplicates: 0  Warnings: 0
  28.  
  29. mysql> select * from Tabla2;
  30. +------+--------+
  31. | id   | nombre |
  32. +------+--------+
  33. |    1 | ONE    |
  34. |    2 | TWO    |
  35. |    3 | THREE  |
  36. +------+--------+
  37. 3 rows in set (0.00 sec)
  38.  
  39. mysql> CREATE TABLE Tabla3 (id INT, nombre VARCHAR (10));
  40. Query OK, 0 rows affected (0.11 sec)
  41.  
  42. mysql> INSERT INTO Tabla3 VALUES (1, 'AAAAA'), (2, 'BBBBB'), (3, 'CCCCC');
  43. Query OK, 3 rows affected (0.05 sec)
  44. Records: 3  Duplicates: 0  Warnings: 0
  45.  
  46. mysql> select * from Tabla3;
  47. +------+--------+
  48. | id   | nombre |
  49. +------+--------+
  50. |    1 | AAAAA  |
  51. |    2 | BBBBB  |
  52. |    3 | CCCCC  |
  53. +------+--------+
  54. 3 rows in set (0.00 sec)
  55.  
  56. mysql> UPDATE Tabla1 T1
  57.     -> INNER JOIN Tabla2 T2 ON T1.id_tabla2 = T2.id
  58.     -> INNER JOIN Tabla3 T3 ON T1.id_tabla3 = T3.id
  59.     -> SET T1.nombre = CONCAT(T2.nombre, ' ', T3.nombre);
  60. Query OK, 0 rows affected (0.12 sec)
  61. Rows matched: 5  Changed: 0  Warnings: 0
  62.  
  63. mysql> select * from Tabla1;
  64. +------+-------------+-----------+-----------+
  65. | id   | nombre      | id_tabla2 | id_tabla3 |
  66. +------+-------------+-----------+-----------+
  67. |    1 | ONE AAAAA   |         1 |         1 |
  68. |    1 | ONE BBBBB   |         1 |         2 |
  69. |    1 | TWO AAAAA   |         2 |         1 |
  70. |    1 | THREE BBBBB |         3 |         2 |
  71. |    1 | TWO BBBBB   |         2 |         2 |
  72. +------+-------------+-----------+-----------+
  73. 5 rows in set (0.00 sec)

Dale un vistazo a ver si es lo que necesitas y nos comentas.

Saludos
Leo