Обновление MySQL на основе почтового индекса - PullRequest
2 голосов
/ 10 октября 2011

У меня есть пользовательская таблица, которая включает в себя поле с именем zip (почтовый индекс) У меня также есть географическая таблица со значениями широты и долготы, основанными на почтовых индексах.

так:

usertable 
table_1 contains fields: zip, latitude,longitude (in last 2 fields all values are NULL)
geotable:
table_2 contains fields: zip, latitude,longitude

Почтовый индекс в таблице_1 имеет следующий формат: 1111 AA (4 цифры, 2 буквы, обычно разделенные пустым знаком)

Почтовый индекс в таблице_2 имеет формат: 1111 (только четыре цифры)

Я пытаюсь выяснить, как должен выглядеть запрос на обновление?

Я хочу обновить usertable значениями из geotable, чтобы поисковый запрос мог выполняться без каких-либо объединений. Поисковые запросы являются наиболее часто используемыми запросами на этом сайте. Обновления / проверки выполняются редко.

Заранее спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Вы могли бы написать

UPDATE table_1 SET
  latitude = (SELECT latitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%')),
  longitude = (SELECT longitude FROM table_2 WHERE table_1.zip LIKE CONCAT(table_2.zip, '%'));

К сожалению, я не верю, что есть синтаксис, очень похожий на то, что предлагает Колин. Может оказаться более эффективным сначала просто выбрать значения из table_2, а затем вставить их.

1 голос
/ 10 октября 2011

Вы можете использовать предложение UPDATE ... JOIN для объединения таблиц и выполнения обновления:

update
    usertable ut inner join geotable gt on
        ut.zip like concat(gt.zip, '%')
    set ut.latitude = gt.latitude,
        ut.longitude = gt.longitude;

Демонстрация: http://www.sqlize.com/398E9CKddr

0 голосов
/ 10 октября 2011

Не проверено, и у меня может быть не совсем правильный синтаксис, но это принцип:

UPDATE table_1  COLUMNS(latitude, longitude) VALUES (
   SELECT latitude, longitude FROM table_2 
      where table_1.zip LIKE CONCAT(table_2.zip, ' %'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...