【问题标题】:Quick MySQL query question快速MySQL查询问题
【发布时间】:2011-02-01 00:40:55
【问题描述】:

我有两个表,都有相同的列。我们称他们为tilistingstilistings_temp

tilistings_templatlng 中的两列使用 Google API 进行地理编码。 tilistings 有这两个相同的列,但它们是空的。 tilistings 可能包含一些不在tilistings_temp 中的行,反之亦然。

每天晚上,tilistings 都是从第三方导入的

tilistings中的latlng的值设置为tilistings_temp中的对应值(两个表共有mlsid

是吗:

UPDATE tilistings
SET lat = tilistings_temp.lat, lng = tilistings_temp.lng
WHERE mlsid = tilistings_temp.mlsid;

???很抱歉问这是否正确,我不能冒险破坏数据库中的数据。

【问题讨论】:

    标签: mysql compare sql-update


    【解决方案1】:

    更新连接可能比双子查询更快,而且肯定不那么难看。

    UPDATE tilistings a
        JOIN tilistings_temp b USING (mlsid)
    SET a.lat = b.lat, a.lng = b.lng;
    

    【讨论】:

      【解决方案2】:
      update tilistings a
      set (a.lat,a.lng) = (
          select b.lat,b.lng
          from tilistings_temp b
          where b.mlsid = a.mlsid
      );
      

      编辑:刚刚尝试过,MySQL 不能(还?)理解像 Oracle 那样的复合属性更新,所以通过 MySQL 完成时它会变得有点丑陋并且可能更慢

      update tilistings a
      set a.lat = (
          select b.lat
          from tilistings_temp b
          where b.mlsid = a.mlsid
      ) , a.lng = (
          select c.lng
          from tilistings_temp c
          where c.mlsid = a.mlsid
      );
      

      【讨论】:

      • 这是对 1800 行的 45 秒查询,但它起作用了......这就足够了,这个脚本在凌晨 3 点作为 cron 作业运行,它比地理编码快得多......谢谢
      • 只是为了确保您在 tilistings_temp.mlsid 属性上有一个索引,是吗?如果没有,请确保您不必扫描。
      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多