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

update a tres tablas con inner join

Estas en el tema de update a tres tablas con inner join en el foro de Mysql en Foros del Web. Hola a todos. Tengo una duda con un update a tres tablas relacionadas mediante el ID (de usuario). Hasta hace nada lo hacia mediante un ...
  #1 (permalink)  
Antiguo 10/03/2011, 21:13
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
update a tres tablas con inner join

Hola a todos.

Tengo una duda con un update a tres tablas relacionadas mediante el ID (de usuario).

Hasta hace nada lo hacia mediante un metodo bastante basico:
Código MySQL:
Ver original
  1. UPDATE tabla1, tabla2, tabla3
  2.         SET tabla1.campo1 = '$...', tabla2.campo2 = '$...', tabla3.campo3='$...'
  3.         WHERE (tabla1.ID = '$ID' AND tabla2.ID = tabla1.ID AND tabla3.ID = tabla1.ID)


pero he leido que no es el metodo mas adecuado para hacerlo.

En lugar de eso, (creo) se proponen INNER JOIN.

Creo que con esto, ahora quedaria asi:
Código MySQL:
Ver original
  1. UPDATE tabla1
  2.         INNER JOIN tabla2 ON tabla1.ID = tabla2.ID
  3.         INNER JOIN tabla3 ON tabla1.ID = tabla3.ID
  4.         SET tabla1.campo1='$...', tabla2.campo2='$...', tabla3.campo3='$...'  
  5.         WHERE tabla1.ID = '$ID'";


(probaria el ejemplo sin preguntar pero el codigo php es bastante mas largo y aun estoy haciendolo)

Queria preguntar si es este el "metodo bueno" o si se puede mejorar.

1 saludo y gracias!

Última edición por gnzsoloyo; 08/02/2014 a las 22:20
  #2 (permalink)  
Antiguo 11/03/2011, 05:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: update a tres tablas con inner join

Por un lado, siempre es mejor usar INNER JOIN en lugar de la coma, como mínimo porque el JOIN es optimizable por el parser y el WHERE no, así que en definitiva puede terminar siendo más eficiente y más preciso.
La coma intentará hacer un matching ente campos del mismo nombre, y si hay al menos un nombre idéntico ente dos tablas, pero que se refieren a valores y/o cosas distintas (diferente dominio de datos), el resultado de ese matching puede ser incorrecto.
Por otro lado, ,siempre es conveniente leer primero el manual, especialmente en temas algo complejos como éste UPDATE.
Ten en cuenta esto:
Cita:
Si usa un comando UPDATE de múltiples tablas que involucren tablas InnoDB con restricciones de claves foráneas, el optimizador de MySQL puede procesar tablas en un orden distinto al de la relación padre/hijo. En este caso, el comando fall y hace un roll back. En su lugar, actualice una única tabla y confíen en las capacidades de ON UPDATE que proporciona InnoDB para que el resto de tablas se modifiquen acórdemente. Consulte Sección 15.6.4, “Restricciones (constraints) FOREIGN KEY”.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/03/2011, 05:59
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: update a tres tablas con inner join

ok, muchas gracias gnzsoloyo

Actualmente utilizo MyISAM

Solo queria saber sobre la "integridad" del codigo.

1 vez mas, gracias!

Etiquetas: join, tablas, tres, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:08.