Tuyên bố cập nhật MYSQL Bảng tham gia bên trong


201

Tôi không biết vấn đề là gì. Sử dụng MySQL 5.0 tôi gặp lỗi biên dịch khi cố chạy câu lệnh cập nhật MYSQL sau đây

  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

tất cả các tên trường là chính xác. Có suy nghĩ gì không?


tôi thậm chí đã xóa bí danh, khi tôi đổi nó thành CHỌN b. * TỪ doanh nghiệp b tham gia bên trong nó hoạt động
Rung động cuộc sống

Câu trả lời:


433

Thử cái này:

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

Cập nhật:

Vì bạn nói rằng truy vấn mang lại lỗi cú pháp, tôi đã tạo một số bảng mà tôi có thể kiểm tra lại và xác nhận rằng không có lỗi cú pháp trong truy vấn của mình:

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

Xem? Không có lỗi cú pháp. Tôi đã thử nghiệm với MySQL 5.5.8.


Tôi đã thử điều đó và nhận được cùng một lỗi. - Lỗi khi nhận kế hoạch thực hiện: Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết đúng cú pháp để sử dụng gần 'CẬP NHẬT doanh nghiệp dưới dạng b INNER THAM GIA business_geocode g ON b.business_id = g.busines' tại dòng 1
Rung động cuộc sống

Vui lòng gửi kết quả show create table business;show create table business_geocode;vì vậy tôi có thể kiểm tra truy vấn của mình tốt hơn một chút. Cảm ơn.
Asaph

Không có lỗi cú pháp. Tôi chỉ xác nhận nó và cập nhật câu trả lời của tôi.
Asaph

4
@ user719316: Có gì đó đáng nghi trước truy vấn đó ... bạn có thiếu dấu chấm phẩy không?
Bobby

2
@Joakim ASTừ khóa là tùy chọn. Nhưng vì bạn đã đề cập đến nó, tôi đã thêm nó vào câu trả lời vì mục đích nhất quán, vì tôi đã sử dụng nó trên bí danh đầu tiên trong cùng một truy vấn.
Asaph

15

Các SETđiều khoản nên đi sau đặc điểm kỹ thuật bảng.

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

Đối với MySql WorkBench, vui lòng sử dụng bên dưới:

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); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.