Innere Verknüpfungstabellen der MYSQL-Aktualisierungsanweisung

201

Ich habe keine Ahnung, wo das Problem liegt. Bei Verwendung von MySQL 5.0 wird beim Versuch, die folgende MYSQL-Update-Anweisung auszuführen, ein Kompilierungsfehler angezeigt

  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

Alle Feldnamen sind korrekt. Irgendwelche Gedanken?

Schwingung des Lebens
quelle
Ich habe sogar den Alias ​​entfernt, als ich ihn in SELECT b geändert habe. * FROM business b inner join funktioniert
Vibration Of Life

Antworten:

433

Versuche dies:

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

Aktualisieren:

Da Sie sagten, dass die Abfrage einen Syntaxfehler ergab, habe ich einige Tabellen erstellt, anhand derer ich sie testen konnte, und bestätigt, dass meine Abfrage keinen Syntaxfehler enthält:

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

Sehen? Kein Syntaxfehler. Ich habe gegen MySQL 5.5.8 getestet.

Asaph
quelle
Ich habe das versucht und erhalte den gleichen Fehler. - Fehler beim Abrufen des Ausführungsplans: Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'UPDATE business as b INNER JOIN business_geocode g ON b.business_id = g.busines' in Zeile 1
Vibration Of Life
Bitte poste die Ergebnisse von show create table business;und show create table business_geocode;damit ich meine Anfrage etwas besser testen kann. Vielen Dank.
Asaph
Es liegt kein Syntaxfehler vor. Ich habe es gerade bestätigt und meine Antwort aktualisiert.
Asaph
4
@ user719316: Vor dieser Abfrage ist etwas faul ... fehlt dir ein Semikolon?
Bobby
2
@Joakim Das ASSchlüsselwort ist optional. Aber da Sie es erwähnt haben, habe ich es aus Gründen der Konsistenz zur Antwort hinzugefügt, da ich es für den ersten Alias ​​in derselben Abfrage verwendet habe.
Asaph
15

Die SETKlausel sollte nach der Tabellenspezifikation stehen.

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
quelle
-2

Für MySql WorkBench verwenden Sie bitte unten:

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); 
TroubleShooter
quelle