Tablas de unión interna de la declaración de actualización MYSQL

201

no tengo idea cual es el problema. Al usar MySQL 5.0, obtengo un error de compilación al intentar ejecutar la siguiente declaración de actualización MYSQL

  UPDATE  b
SET b.mapx = g.latitude,
  b.mapy = g.longitude
FROM business AS b
INNER JOIN business_geocode g ON b.business_id = g.business_id
WHERE  (b.mapx = '' or b.mapx = 0) and
  g.latitude > 0

Todos los nombres de campo son correctos. ¿Alguna idea?

Vibración de la vida
fuente
incluso eliminé el alias, cuando lo cambio a un SELECCIONAR b. * DESDE el negocio b interno, funciona
Vibración de la vida

Respuestas:

433

Prueba esto:

UPDATE business AS b
INNER JOIN business_geocode AS g ON b.business_id = g.business_id
SET b.mapx = g.latitude,
  b.mapy = g.longitude
WHERE  (b.mapx = '' or b.mapx = 0) and
  g.latitude > 0

Actualizar:

Como dijo que la consulta arrojó un error de sintaxis, creé algunas tablas con las que podría probarla y confirmó que no hay ningún error de sintaxis en mi consulta:

mysql> create table business (business_id int unsigned primary key auto_increment, mapx varchar(255), mapy varchar(255)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> create table business_geocode (business_geocode_id int unsigned primary key auto_increment, business_id int unsigned not null, latitude varchar(255) not null, longitude varchar(255) not null, foreign key (business_id) references business(business_id)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> UPDATE business AS b
    -> INNER JOIN business_geocode AS g ON b.business_id = g.business_id
    -> SET b.mapx = g.latitude,
    ->   b.mapy = g.longitude
    -> WHERE  (b.mapx = '' or b.mapx = 0) and
    ->   g.latitude > 0;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

¿Ver? Sin error de sintaxis. Probé contra MySQL 5.5.8.

Asaph
fuente
Lo intenté y obtengo el mismo error. - Error al obtener el plan de ejecución: tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para obtener la sintaxis correcta para usar cerca de 'ACTUALIZAR negocio como b INNER JOIN business_geocode g ON b.business_id = g.busines' en la línea 1
Vibration Of Life
Publique los resultados de show create table business;y show create table business_geocode;para que pueda probar mi consulta un poco mejor. Gracias.
Asaph
No hay error de sintaxis. Lo acabo de confirmar y actualicé mi respuesta.
Asaph
44
@ user719316: Hay algo sospechoso antes de esa consulta ... ¿te falta un punto y coma?
Bobby
2
@Joakim La ASpalabra clave es opcional. Pero como lo mencionó, lo agregué a la respuesta en aras de la coherencia, ya que lo usé en el primer alias en la misma consulta.
Asaph
15

La SETcláusula debe venir después de la especificación de la tabla.

UPDATE business AS b
INNER JOIN business_geocode g ON b.business_id = g.business_id
SET b.mapx = g.latitude,
  b.mapy = g.longitude
WHERE  (b.mapx = '' or b.mapx = 0) and
  g.latitude > 0
mathiasfk
fuente
-2

Para MySql WorkBench, utilice a continuación:

update emp as a
inner join department b on a.department_id=b.id
set a.department_name=b.name
where a.emp_id in (10,11,12); 
Bombero
fuente