快速MySQL查询问题

时间:2011-02-01 00:40:56

标签: mysql compare sql-update

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

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

每晚,tilistings从第三方导入,我不想对tilistings_temp中现有的2500坐标进行地理编码,所以我的问题是如何比较这两个表格:

lat中的lngtilistings的值设置为tilistings_temp的相应值(两个表共有mlsid个)

是吗:

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

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

2 个答案:

答案 0 :(得分:1)

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
);

答案 1 :(得分:1)

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

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