Pernyataan Pembaruan MYSQL Batin Gabung Tabel


201

Saya tidak tahu apa masalahnya. Menggunakan MySQL 5.0 saya mendapatkan kesalahan kompilasi ketika mencoba menjalankan pernyataan pembaruan MYSQL berikut

  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

semua nama bidang sudah benar. Adakah pikiran?


saya bahkan menghapus alias, ketika saya mengubahnya menjadi SELECT b. * DARI bisnis b bergabunglah ia bekerja
Vibration Of Life

Jawaban:


433

Coba ini:

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

Memperbarui:

Karena Anda mengatakan kueri menghasilkan kesalahan sintaksis, saya membuat beberapa tabel yang bisa saya uji terhadapnya dan mengonfirmasi bahwa tidak ada kesalahan sintaksis dalam kueri saya:

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

Lihat? Tidak ada kesalahan sintaksis. Saya menguji MySQL 5.5.8.


Saya mencobanya dan saya mendapatkan kesalahan yang sama. - Kesalahan dalam mendapatkan rencana eksekusi: Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'UPDATE bisnis sebagai b INNER JOIN business_geocode g ON b.business_id = g.busines' di baris 1
Vibration Of Life

Harap kirim hasil show create table business;dan show create table business_geocode;agar saya dapat menguji kueri saya sedikit lebih baik. Terima kasih.
Asaf

Tidak ada kesalahan sintaksis. Saya baru saja mengkonfirmasi dan memperbarui jawaban saya.
Asaf

4
@ user719316: Ada sesuatu yang mencurigakan sebelum permintaan itu ... apakah Anda melewatkan titik koma?
Bobby

2
@ Joakim Kata ASkunci adalah opsional. Tetapi karena Anda menyebutkannya, saya menambahkannya ke jawaban demi konsistensi, karena saya memang menggunakannya pada alias pertama dalam kueri yang sama.
Asaf

15

The SETklausul harus datang setelah spesifikasi meja.

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

Untuk MySql WorkBench, Silakan gunakan di bawah ini:

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); 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.