【问题标题】:SQL to Update records of one table with records from another table?SQL用另一张表的记录更新一个表的记录?
【发布时间】:2010-02-07 08:43:04
【问题描述】:

我在这里有两个表,它们都包含数以万计的大量记录。现在我们有一个主表,其架构如下:

ID |地点名称 |标签 |说明 |经度 |纬度

我们还有一张桌子:

ID |地点名称 |经度 |纬度

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

编辑

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

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    使用 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...
    • 两个表的 ID 列是否都有唯一索引? ...如果它们被定义为主键,这就足够了。
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多