更新に内部結合を使用した MySQL クエリ
最近、ユーザーが MySQL で INNER JOIN を使用して UPDATE ステートメントを実行しようとしたときにエラーが発生しました5.0。正しいフィールド名を使用しているにもかかわらず、エラーが発生しました。
元のクエリは次のとおりです:
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
問題はクエリの構文にあります。これを解決するには、UPDATE ステートメントでテーブルに明示的に名前を付ける必要があります。修正されたクエリは次のとおりです:
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
ユーザーには構文エラーも発生しました。修正されたクエリに構文エラーが含まれていないことを確認するために、テスト用に次のテーブルが作成されました。
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;
MySQL 5.5.8 を使用してこれらのテーブルに対して修正されたクエリを実行すると、構文エラーは発生しませんでした。クエリの結果は、一致または変更された行がないことを示しています。
以上がINNER JOIN を使用して MySQL データを正しく更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。