Requête MySQL utilisant une jointure interne pour les mises à jour
Un utilisateur a récemment rencontré une erreur en tentant d'exécuter une instruction UPDATE à l'aide d'une INNER JOIN dans MySQL 5.0. L'erreur s'est produite malgré l'utilisation de noms de champs corrects.
La requête d'origine est la suivante :
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
Le problème réside dans la syntaxe de la requête. Pour le résoudre, les tables doivent être explicitement nommées dans l'instruction UPDATE. La requête corrigée est :
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
L'utilisateur a également rencontré une erreur de syntaxe. Pour confirmer que la requête corrigée ne contient pas d'erreurs de syntaxe, les tables suivantes ont été créées à des fins de test :
CREATE TABLE business (business_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, mapx VARCHAR(255), mapy VARCHAR(255)) ENGINE=INNODB; 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;
Lors de l'exécution de la requête corrigée sur ces tables à l'aide de MySQL 5.5.8, aucune erreur de syntaxe ne s'est produite. Le résultat de la requête montre qu'aucune ligne n'a été trouvée ou modifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!