2010-07-30 172 views
1

我需要一些插入語句的幫助。MySQL INSERT INTO聲明

我有:

my_table_a:

School  Latitude  Longitude 
Old School  38.6...  -90.990... 
New School  38.6...  -90.990... 
Other School 38.6...  -90.990... 
Main School 38.6...  -90.990... 

my_table_b:

School  Latitude  Longitude 
City School 
Old School 
Central School   
New School  
Other School 

我需要插入從my_table_a到my_table_b的緯度和經度那裏是之間的匹配學校名稱。問題是表A沒有表B的所有學校,反之亦然。

我試過一個WHERE子句,但它不工作。我需要插入my_table_a.school = my_table_b.school的位置。有什麼建議麼?

+0

你需要插入缺失或更新現有的,或兩者兼而有之? – 2010-07-30 21:09:47

+0

你的意思是你需要用my_table_a的值更新* my_table_b?或者你想插入或更新適當的? – 2010-07-30 21:11:19

+0

插入創建新行 - 要將數據導入匹配學校,您需要使用UPDATE語句... – 2010-07-30 21:15:30

回答

1

你真的想插入或更新嗎?

什麼

UPDATE my_table_b 
set latitude = (select latitude from my_table_a where my_table_a.School = my_table_b.School), 
    longitude = (select longitude from my_table_a where my_table_a.School = my_table_b.School) 
where exists(select 1 from my_table_a where my_table_a.School = my_table_b.School) 

這將是通用的SQL。我不確定mysql是否支持更新連接,這會減少重複性和效率。

+0

+1:並非所有數據庫都支持UPDATE語句中的JOIN - 這是最便攜的版本。 – 2010-07-30 21:20:49

+0

嗨,弗蘭克,非常感謝。它工作完美。我在這個問題上掙扎了幾個小時,並且在5分鐘內解決了這個問題。我從你那裏學到了一些關於MySQL的新知識。謝謝。 – Laxmidi 2010-07-30 22:13:50

+0

嗨OMG小馬, 謝謝您的留言。只要我看到你的屏幕名稱彈出,我知道我的問題很快就會解決。我認爲你已經發布了我的所有mySQL問題 - 並且回答了大部分問題。再次感謝。 – Laxmidi 2010-07-30 22:18:43

2

使用ANSI-92語法:

UPDATE TABLE_B 
    JOIN TABLE_A ON TABLE_A.school = TABLE_B.school 
    SET latitude = TABLE_A.latitude, 
     longitude = TABLE_A.longitude 

使用ANSI-89語法:

UPDATE TABLE_B, TABLE_A 
    SET latitude = TABLE_A.latitude, 
     longitude = TABLE_A.longitude 
WHERE TABLE_A.school = TABLE_B.school