Обновление одной таблицы MySQL со значениями из другой


Я пытаюсь обновить одну таблицу MySQL на основе информации от другого.

мой original таблица выглядит следующим образом:

id | value
------------
1  | hello
2  | fortune
3  | my
4  | old
5  | friend

и tobeupdated таблица выглядит следующим образом:

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        |    | old
4        |    | friend
5        |    | fortune

Я хочу обновить id на tobeupdated С id С original на основе value (строки, хранящиеся в

2 82

2 ответа:

UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

это должно сделать это, и на самом деле он делает именно то, что ваш. Однако я предпочитаю синтаксис "JOIN" для соединений, а не несколько условий "WHERE", я думаю, что его легче читать

Что касается медленной работы, насколько велики таблицы? Вы должны иметь индексы на tobeupdated.value и original.value

изменить: мы также можем упростить запрос

UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

USING является сокращением, когда обе таблицы соединения имеют одинаковое имя key например id. т. е. эквисоединение - http://en.wikipedia.org/wiki/Join_(в SQL) эквисоединение#

Это зависит от того, что такое использование этих таблиц, но вы можете рассмотреть вопрос о включении триггера в исходную таблицу при вставке и обновлении. После завершения вставки или обновления обновите вторую таблицу на основе только одного элемента из исходной таблицы. Так будет быстрее.