当field2重复时更新field1

时间:2012-10-05 20:52:43

标签: mysql sql sql-update

我想在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中执行此操作。

2 个答案:

答案 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)