MYSQL更新ステートメントの内部結合テーブル


201

何が問題なのかわかりません。MySQL 5.0を使用すると、次の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

すべてのフィールド名が正しいです。何かご意見は?


SELECT b。* FROM business b inner joinに変更すると、エイリアスも削除されました
Vibration Of Life

回答:


433

これを試して:

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

更新:

クエリにより構文エラーが発生したとのことですので、テストできるテーブルをいくつか作成し、クエリに構文エラーがないことを確認しました。

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

見る?構文エラーはありません。MySQL 5.5.8に対してテストしました。


私はそれを試しました、そして同じエラーを得ています。-実行計画の取得時のエラー:SQL構文にエラーがあります。1行目の「UPDATE business as b INNER JOIN business_geocode g ON b.business_id = g.busines」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
Vibration Of Life

結果を投稿してくださいshow create table business;show create table business_geocode;私は少し良く私のクエリをテストすることができます。ありがとう。
Asaph

構文エラーはありません。私はそれを確認し、私の答えを更新しました。
Asaph

4
@ user719316:そのクエリの前に何か怪しいものがあります...セミコロンが欠けていますか?
ボビー

2
@Joakim ASキーワードはオプションです。しかし、あなたがそれを述べたので、同じクエリの最初のエイリアスで使用したので、一貫性を保つために答えに追加しました。
Asaph 2012年

15

SET句は来るべき後にテーブル仕様。

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

-2

MySql WorkBenchの場合は、以下を使用してください。

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); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.