2012-10-05 50 views
0

我想在不同的記錄中更新它們的site_id相同的經度和緯度位置。當field2被複制時更新field1

例如,如果

ID | SiteID | Latitude | Longitude 
1  5  74.4545 -35.5466 
2  6  74.4545 -35.5466 
3  5  75.4584 -45.5966 
4  6  79.6545 -36.5496 

我想記錄3,所有匹配SITEID 5取1記錄的經度和緯度類似的記錄2和4

我怎樣才能做到別人這在mysql中。

回答

1

我將用戶的site_table作爲您的表的名稱。

UPDATE site_table TARG, site_table VALDATA 
SET TARG.Latitude = VALDATA.Latitude, TARG.Longitude = VALDATA.Longitude 

WHERE TARG.SiteId = VALDATA.SiteId 
    AND VALDATA.id = (SELECT min(MINREC.id) FROM site_table MINREC 
        WHERE MINREC.SiteId = TARG.SiteId) 
+0

謝謝,只要將這個小錯誤TARG.Longitude = VALDATA.Latitude更改爲TARG.Longitude = VALDATA.Longitude。 – locorecto

+0

沒有工作,出現以下錯誤:您無法在FROM子句中爲更新指定目標表'TARG' – locorecto

2

您需要先找到正確的值,然後進行更新。正確的值爲:

select t.* 
from t join 
    (select siteId, min(id) as minId 
     from t 
     group by siteId 
    ) ts 
    t.id = minId 

現在的問題是,您無法更新和引用查詢中的同一個表。所以,把它放在一張臨時表格中,比如master

這些是主記錄。您可以執行更新爲:

update t 
    join master 
    on t.id = master.id 
    set t.latitude = master.latitude, 
     t.longitude = master.longitude 
相關問題