SQL - Actualizar UPDATE varias tablas a la vez

   
Vista:

Actualizar UPDATE varias tablas a la vez

Publicado por cotarejo (12 intervenciones) el 21/07/2015 17:13:34
Buenas tardes, quiero hacer un UPDATE a 4 tablas a la vez, y no sé si es mejor con INNER JOIN o con UNION o cómo hacerlo... de momento he probado con INNER JOIN esto:

UPDATE tablausuarios INNER JOIN tablaplatos ON tablausuarios.id = tablaplatos.id INNER JOIN tablaprecios ON tablausuarios.id = tablaprecios.id INNER JOIN tablarestaurantes ON tablausuarios.id = tablarestaurantes.id SET tablausuarios.password='labrador' WHERE tablausuarios.login='labrador' AND SET tablaplatos.primerprimero='judias verdes', tablaplatos.segundoprimero='macarrones con tomate', tablaplatos.tercerprimero='marmitaco', tablaplatos.primersegundo='escalope de ternera', tablaplatos.segundosegundo='merluza rellena', tablaplatos.tercersegundo='chipirones en su tinta', tablaplatos.primerpostre='sorbete limón', tablaplatos.segundopostre='plátano con chocolate', tablaplatos.tercerpostre='crocanti', tablaplatos.cafe=1, tablaplatos.pan=1 WHERE tablaplatos.nombre='labrador' AND SET tablarestaurantes.localidad='Santander', tablarestaurantes.telefono=942232512, tablarestaurantes.latitud=43.4649, tablarestaurantes.longitud=-3.80519 WHERE tablarestaurantes.nombre='labrador' AND SET tablaprecios.precio=13 WHERE tablaprecios.nombre='labrador'


y me da error....

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET tablaplatos.primerprimero='judias verdes', tablaplatos.segundoprimero='macar' at line 1

Las 4 tablas que quiero actualizar se llaman: tablausuarios, tablaprecios, tablarestaurantes y tablaplatos

tablaplatos:


tablaplatos

tablarestaurantes:


tablarestaurantes

tablaprecios:


tablaprecios

tablausuarios:


tablausuarios



¿¿Alguna idea de cómo actualizar las 4 tablas a la vez en un update??


Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Actualizar UPDATE varias tablas a la vez

Publicado por Isaias (690 intervenciones) el 21/07/2015 17:51:34
Según veo es MYSQL, haces según tu un UPDATE, ¿Dónde quedo el SET de tus campos?, eso es lo que te dice el mensaje.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Actualizar UPDATE varias tablas a la vez

Publicado por cotarejo (12 intervenciones) el 21/07/2015 20:36:19
Si es MySQL e intento hacer la conexión a través de PDO.


UPDATE tablausuarios INNER JOIN tablaplatos ON tablausuarios.id = tablaplatos.id INNER JOIN tablaprecios ON tablausuarios.id = tablaprecios.id INNER JOIN tablarestaurantes ON tablausuarios.id = tablarestaurantes.id SET tablausuarios.password='labrador' WHERE tablausuarios.login='labrador' AND SET tablaplatos.primerprimero='judias verdes', tablaplatos.segundoprimero='macarrones con tomate', tablaplatos.tercerprimero='marmitaco', tablaplatos.primersegundo='escalope de ternera', tablaplatos.segundosegundo='merluza rellena', tablaplatos.tercersegundo='chipirones en su tinta', tablaplatos.primerpostre='sorbete limón', tablaplatos.segundopostre='plátano con chocolate', tablaplatos.tercerpostre='crocanti', tablaplatos.cafe=1, tablaplatos.pan=1 WHERE tablaplatos.nombre='labrador' AND SET tablarestaurantes.localidad='Santander', tablarestaurantes.telefono=942232512, tablarestaurantes.latitud=43.4649, tablarestaurantes.longitud=-3.80519 WHERE tablarestaurantes.nombre='labrador' AND SET tablaprecios.precio=13 WHERE tablaprecios.nombre='labrador'

Ahí están los SETS....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar UPDATE varias tablas a la vez

Publicado por leonardo_josue (877 intervenciones) el 21/07/2015 21:13:52
Hola cotarejo:

Es conveniente que antes que nada revises la documentación oficial de MySQL para que observes cómo funcionan las actualizaciones a múltiples tablas:

http://dev.mysql.com/doc/refman/5.0/en/update.html

En la parte inferior, en los comentarios, hay varios ejemplos que te pueden servir, o también puedes encomendarte a SAN GOOGLE, él generalmente tiene la respueste.

Ahora bien, rápidamente te comento que tienes varios horrores (no errores) de sintáxis... para comenzar, la palabra reservada SET sólo se coloca una vez... desde ahí tienes un problema. Antes de tratar de revisar tu consulta, habría que revisar algunas cosas:

1. Por qué razón quieres hacer una actualización múltiple utilizando JOIN's, si en realidad NO TIENEN NINGUNA UTILIDAD en tu caso. Las actualizaciones con JOIN se utilizan cuando el valor a actualizar depende de otra tabla, pero en tu caso, todos los SET los estás haciendo con valores fijos:

1
2
3
4
SET tablausuarios.password='labrador
SET tablaplatos.primerprimero='judias verdes'...
SET tablarestaurantes.localidad='Santander'...

De tal forma que los JOIN's son completamente inutiles... Si crees que por hacer un solo UPDATE en lugar de 4 estás "optimizando" tus operaciones o haciendolas más rápidas, estás equivocado. Lo que estás tratando de hacer incluso sería más lento que hacer tus cuatro actualizaciones por separado.

2. Así como sólo debe haber un SET en tu sentencia, lo mismo pasa con el WHERE... sólo puede haber un WHERE en toda la sentencia...

Imagina que el UPDATE en realidad es un SELECT... de hecho, una buena práctica es primero hacer un SELECT y despúes transformarlo a su respectivo UPDATE, pero bueno, esa es otra cuestión...

Tu UPDATE debería quedar más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
UPDATE tabla1
INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
INNER JOIN tabla3 ON tabla1.campo = tabla2.campo and tabla1.campo = tabla3.campo
...
[LEFT|INNER|RIGTH] JOIN tabla_n ON tabla_n.campo = tabla1.campo
SET
    tabla1.campo = 'lo que sea', ... tabla1.campo_n = 'lo que sea',
    tabla2.campo = 'algo'... tabla2.campo = tabla3.campo,... tabla2.campo_n = 'algo'
    ...
WHERE
    tabla1. campo = 'labrador' and tabla2.campo = 'labrador' and ...
    tablan.campo = 'lo que sea';

Pero vuelvo a insistir en por qué lo quieres hacer así en lugar de hacer las actualizaciones por separado

Saludos y espero tus comentarios.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar