MYSQL Güncelleme Bildirimi İç Birleştirme Tabloları


201

Sorunun ne olduğu hakkında hiçbir fikrim yok. MySQL 5.0 kullanarak aşağıdaki MYSQL güncelleştirme deyimini çalıştırmaya çalışırken derleme hatası alıyorum

  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üm alan adları doğrudur. Düşüncesi olan var mı?


Ben SEÇ b değiştirmek zaman ben bile, takma kaldırıldı * iş GELEN iç çalıştığını katılmak b.
Titreşim Of Life

Yanıtlar:


433

Bunu dene:

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

Güncelleme:

Sorgunun sözdizimi hatası verdiğini söylediğinden, test edebileceğim bazı tablolar oluşturdum ve sorgumda sözdizimi hatası olmadığını doğruladım:

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

Görmek? Sözdizimi hatası yok. MySQL 5.5.8'e karşı test ettim.


Bunu denedim ve aynı hatayı alıyorum. - Yürütme planını alma hatası: SQL sözdiziminizde bir hata var; yakın kullanma hakkı sözdizimi için MySQL sunucu sürümüne karşılık gelir line 1 'İÇ b olarak GÜNCELLEME iş b.business_id = g.busines AÇIK business_geocode g JOIN' buna manuel kontrol
Of Life Titreşim

Lütfen sonuçlarını gönderin show create table business;ve show create table business_geocode;böylece sorgumu biraz daha iyi test edebilirim. Teşekkürler.
Asaph

Sözdizimi hatası yok. Sadece onayladım ve cevabımı güncelledim.
Asaph

4
@ user719316: Bu sorgudan önce balık gibi bir şey var ... noktalı virgül eksik mi?
Bobby

2
@Joakim ASAnahtar kelime isteğe bağlıdır. Ama bahsettiğinizden beri, aynı sorgudaki ilk takma adda kullandığım için tutarlılık uğruna cevabı ekledim.
Asaph

15

SETFıkra gelmelidir sonra masa şartname.

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 için lütfen aşağıda kullanın:

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); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.