我想在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中执行此操作。
答案 0 :(得分: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
答案 1 :(得分: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)