Имеются две таблицы с именем мастера и версии. версии таблица содержит записи мастер таблица в разные моменты времени.Как обновить несколько столбцов на основе значений из связанной таблицы?
-------------------------
masters
-------------------------
id | name | added_at
----+-------+------------
1 | a-old | 2013-08-13
2 | b-new | 2012-04-19
3 | c-old | 2012-02-01
4 | d-old | 2012-12-24
Гарантируется, что существует по крайней мере одинверсии запись для каждого из мастеров запись.
---------------------------------------------
versions
---------------------------------------------
id | name | added_at | notes | master_id
----+-------+--------------------------------
1 | a-new | 2013-08-14 | lorem | 1
1 | a-old | 2013-08-13 | lorem | 1
2 | b-new | 2012-04-19 | lorem | 2
3 | c-old | 2012-02-01 | lorem | 3
4 | d-new | 2013-02-20 | lorem | 4
5 | d-old | 2012-12-24 | lorem | 4
Таблицы также можно найти в этом SQL Fiddle.
последняя версии каждого мастер записи может быть выбрана, как показан в этом примере для мастеров рекордных 2
:
SELECT * FROM versions
WHERE master_id = 2
ORDER BY added_at DESC
LIMIT 1;
Как я могу обновить каждую запись из мастеров таблицы его последниеверсия в одна команда? Я хочу переписать значения как для столбцов name
, так и для added_at
. Обратите внимание, что есть дополнительные столбцы в версии таблицы, которых нет в таблице , такой как notes
.
Может ли обновление выполнить с помощью JOIN
, чтобы оно выполнялось быстро на больших таблицах?
Я удалил детали, соответствующие конкретному '..id = 2'. Запустив ваш пример, вы пропустили обновление строки * master * с 'id' =' 4', 'd-old' по какой-то причине. – JJD
Теперь проверьте [эту ссылку] (http://sqlfiddle.com/#!2/e56eb9/1). если его правильно, то я изменю сообщение – Romesh
Выглядит неплохо. Кажется, он также работает с дополнительными столбцами, поскольку я представил их на мой вопрос тем временем. Обновите свой ответ. Btw: Типо в «Fiddel». – JJD