2011-02-01 246 views
1

我有兩個表,都有相同的列。我們會打電話給他們在tilistings_templatlng與谷歌API的地理編碼的tilistingstilistings_temp快速MySQL查詢問題

兩列。 tilistings有這兩列,但它們都是空的。 tilistings可能包含一些不在tilistings_temp中的行,反之亦然。

每天晚上,tilistings從第三方進口的,我不希望有地理編碼現有2500個座標是在tilistings_temp所以我的問題是如何比較這兩個表和:

設定值在tilistingstilistings_temp的相應值latlng(兩個表具有mlsid中常見)

它是:

UPDATE tilistings 
SET lat = tilistings_temp.lat, lng = tilistings_temp.lng 
WHERE mlsid = tilistings_temp.mlsid; 

???對不起,如果這是正確的,我不能冒險破壞數據庫內的數據。

回答

1

更新完成可能比較慢連接可能比雙重子查詢更快,也不會比較難看。

UPDATE tilistings a 
    JOIN tilistings_temp b USING (mlsid) 
SET a.lat = b.lat, a.lng = b.lng; 
1
update tilistings a 
set (a.lat,a.lng) = (
    select b.lat,b.lng 
    from tilistings_temp b 
    where b.mlsid = a.mlsid 
); 

編輯:只是嘗試過了,MySQL不能(沒有?)理解像甲骨文複合屬性更新,所以就有點難看,當通過MySQL的

update tilistings a 
set a.lat = (
    select b.lat 
    from tilistings_temp b 
    where b.mlsid = a.mlsid 
) , a.lng = (
    select c.lng 
    from tilistings_temp c 
    where c.mlsid = a.mlsid 
); 
+0

這導致了MySQL的語法錯誤 – 2011-02-01 00:53:01