MySQL-Abfrage mit Inner Join für Updates
Ein Benutzer ist kürzlich auf einen Fehler gestoßen, als er versuchte, eine UPDATE-Anweisung mithilfe eines INNER JOIN in MySQL auszuführen 5,0. Der Fehler ist aufgetreten, obwohl korrekte Feldnamen verwendet wurden.
Die ursprüngliche Abfrage lautet wie folgt:
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
Das Problem liegt in der Syntax der Abfrage. Um es aufzulösen, müssen die Tabellen in der UPDATE-Anweisung explizit benannt werden. Die korrigierte Abfrage lautet:
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
Der Benutzer ist außerdem auf einen Syntaxfehler gestoßen. Um zu bestätigen, dass die korrigierte Abfrage keine Syntaxfehler enthält, wurden die folgenden Tabellen zum Testen erstellt:
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;
Bei der Ausführung der korrigierten Abfrage für diese Tabellen mit MySQL 5.5.8 ist kein Syntaxfehler aufgetreten. Das Abfrageergebnis zeigt, dass keine Zeilen abgeglichen oder geändert wurden.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich MySQL-Daten korrekt mit INNER JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!