0

当他们的 site_id 相同时,我想从不同的记录中更新纬度和经度位置。

例如,如果

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中做到这一点。

4

2 回答 2

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
于 2012-10-05T21:14:33.283 回答
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)
于 2012-10-05T21:12:45.560 回答