SQL更新一个表的记录与另一个表的记录?

时间:2010-02-07 08:43:04

标签: sql mysql

大家好我在这里再次需要帮助 - 我这里有两张桌子,其中包含成千上万的记录。现在我们有一个主表,其架构如下:

ID |位置名称|标签|说明|经度|纬度

我们还有另一张桌子:

ID |位置名称|经度|纬度

问题是第一个表中的经度和纬度条目大多是错误的:( - 正确的信息在第二个表中。假设这些ID对应于两个表中的相同位置,我该如何修复查询,根据第二个表中ID相同的条目更新第一个表中每一行的经度和纬度字段...这里有任何想法 - 我在MySQL数据库...

编辑=====

注意:两个表分别有20 000和50 000行......

2 个答案:

答案 0 :(得分: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列都具有唯一索引。如果它们被定义为主键,这就足够了。

答案 1 :(得分: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)