คำชี้แจงการปรับปรุง 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. * จากธุรกิจ b เข้าร่วมทำงานได้
สั่นสะเทือนของชีวิต

คำตอบ:


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 ของคุณ; ตรวจสอบคู่มือที่สอดคล้องกับรุ่นเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ 'UPDATE business เป็น b INNER JOIN business_geocode g ON b.business_id = g.busines' ที่บรรทัด 1
สั่นสะเทือนของชีวิต

โปรดโพสต์ผลลัพธ์show create table business;และshow create table business_geocode;ฉันสามารถทดสอบการค้นหาของฉันได้ดีขึ้น ขอบคุณ
Asaph

ไม่มีข้อผิดพลาดทางไวยากรณ์ ฉันเพิ่งยืนยันและอัปเดตคำตอบของฉัน
Asaph

4
@ user719316: มีบางสิ่งบางอย่างที่แปลกไปก่อนข้อความค้นหา ... คุณขาดเครื่องหมายอัฒภาคหรือไม่
Bobby

2
@Joakim ASคำหลักเป็นตัวเลือก แต่เนื่องจากคุณพูดถึงมันฉันจึงเพิ่มมันลงไปในคำตอบเพื่อความมั่นคงเนื่องจากฉันใช้มันในนามแฝงแรกในแบบสอบถามเดียวกัน
Asaph

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.