有两个名为masters和versions的表。版本表保存主表在不同时间点的条目。
-------------------------
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;
如何在一个命令中使用最新版本更新masters表的每条记录?我想覆盖和列的值。请注意, versions表中还有一些其他列在masters表中不存在,例如. name
added_at
notes
可以使用 a 完成更新,JOIN
以便在较大的表上快速执行吗?