Essayez ça :
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
Mise à jour :
Puisque vous avez dit que la requête produisait une erreur de syntaxe, j'ai créé quelques tables sur lesquelles je pouvais la tester et j'ai confirmé qu'il n'y avait pas d'erreur de syntaxe dans ma requête :
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
Vous voyez ? Pas d'erreur de syntaxe. J'ai testé contre MySQL 5.5.8.
0 votes
J'ai même supprimé l'alias, mais lorsque je le transforme en une jointure interne SELECT b.* FROM business b, cela fonctionne.