如何使用SQL从另一个表中更新一张表的记录?

4
我这里有两个表,都包含成千上万条记录。我们有一个主表,其模式如下:
ID | 地点名称 | 标签 | 描述 | 经度 | 纬度
还有另一张表:
ID | 地点名称 | 经度 | 纬度
问题是,第一张表中的经度和纬度条目大多数都是错误的:(正确的信息在第二张表中)。假设ID在两个表中对应于相同的位置,那么我该如何修复查询以根据第二个表中的条目更新第一个表中每一行的经度和纬度字段,其中ID相同。我使用的是MySQL数据库。
注意:两个表分别具有20,000和50,000行。
2个回答

3

使用MySQL 4.0+,您应该能够使用以下INNER JOIN语法:

UPDATE 
    new_table 
INNER JOIN 
    old_table ON (old_table.id = new_table.id)
SET 
    new_table.latitude = old_table.latitude,
    new_table.longitude = old_table.longitude;

否则,您还应该能够执行以下操作:
UPDATE 
    new_table 
SET 
    latitude = (SELECT latitude FROM old_table WHERE old_table.id = new_table.id),
    longitude = (SELECT longitude FROM old_table WHERE old_table.id = new_table.id);

确保两个表中的ID列具有唯一索引。如果它们被定义为主键,则已足够。


我一直遇到超时问题 - 实际上两个表中的行数分别为 20,000 和 50,000... - Ali
你在这两个表的ID列上有唯一索引吗?如果它们被定义为主键,那就足够了。 - Daniel Vassallo

2
如果ID是主键/唯一索引,您可以使用REPLACE
REPLACE INTO bad_latlng (id,name,label,descr,lat,lng)
SELECT
b.id,b.name,b.label,b.descr,g.lat,g.lng
FROM
bad_latlng b JOIN good_latlng g ON(b.id = g.id)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接