Быстрый вопрос MySQL - PullRequest
       12

Быстрый вопрос MySQL

1 голос
/ 01 февраля 2011

У меня две таблицы, обе имеют одинаковые столбцы. Мы назовем их tilistings и tilistings_temp

Два столбца в tilistings_temp, lat и lng геокодируются с помощью Google API. tilistings имеет те же две колонки, но они пусты. tilistings может содержать некоторые строки, которых нет в tilistings_temp, и наоборот.

Каждую ночь tilistings импортируется из третьей стороны. Я не хочу геокодировать существующие 2500 координат, которые находятся в tilistings_temp, поэтому мой вопрос заключается в том, как мне сравнить две таблицы и:

Установите значения lat и lng в tilistings для соответствующих значений из tilistings_temp (обе таблицы имеют mlsid вместе)

Это:

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

??? Извините за вопрос, правильно ли это, я просто не могу рисковать повреждением данных в базе данных.

Ответы [ 2 ]

1 голос
/ 05 февраля 2011

Объединение обновлений может быть быстрее и, безусловно, менее уродливо, чем двойной подзапрос.

UPDATE tilistings a
    JOIN tilistings_temp b USING (mlsid)
SET a.lat = b.lat, a.lng = b.lng;
1 голос
/ 01 февраля 2011
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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...