我有两个表,两个都有相同的列。我们会将其称为tilistings
和tilistings_temp
tilistings_temp
,lat
和lng
中的两列使用Google API进行地理编码。 tilistings
具有相同的两列,但它们都是空的。 tilistings
可能包含一些不在tilistings_temp
中的行,反之亦然。
每晚,tilistings
从第三方导入,我不想对tilistings_temp
中现有的2500坐标进行地理编码,所以我的问题是如何比较这两个表格:
将lat
中的lng
和tilistings
的值设置为tilistings_temp
的相应值(两个表共有mlsid
个)
是吗:
UPDATE tilistings
SET lat = tilistings_temp.lat, lng = tilistings_temp.lng
WHERE mlsid = tilistings_temp.mlsid;
???很抱歉询问这是否正确,我无法冒险破坏数据库中的数据。
答案 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;