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

Campo que se alimenta de dos tablas

Estas en el tema de Campo que se alimenta de dos tablas en el foro de Mysql en Foros del Web. Hola buenas tardes Tengo que hacer un update a una tabla y la verdad es que me he perdido un poco os comento la idea ...
  #1 (permalink)  
Antiguo 28/07/2011, 07:20
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
Campo que se alimenta de dos tablas

Hola buenas tardes

Tengo que hacer un update a una tabla y la verdad es que me he perdido un poco os comento la idea para qver si me podeis dar una mano...

tabla1
id
nombre
id_tabla2
id_tabla3

tabla2
id
nombre

tabla3
id
nombre

pues teniendo esta estructura yo lo que quiiero hacer es un update del campo nombre de la tabla1 siendo este el nombre de la tabla2 mas el de la tabla3

Gracias de antemano

Un Saludo
  #2 (permalink)  
Antiguo 28/07/2011, 08:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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
  #3 (permalink)  
Antiguo 28/07/2011, 16:58
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
Respuesta: Campo que se alimenta de dos tablas

Gracias leo eso era exactamente

Un Saludo

Etiquetas: tabla, tablas, campos
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 00:13.