【发布时间】:2013-08-16 08:05:56
【问题描述】:
有两个名为 masters 和 versions 的表。 versions 表包含 master 表在不同时间点的条目。
-------------------------
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
保证每个masters条目都有至少一个 versions条目。
---------------------------------------------
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 中找到。
可以为 masters 记录2 选择每个 master 记录的最新 version,如下例所示:
SELECT * FROM versions
WHERE master_id = 2
ORDER BY added_at DESC
LIMIT 1;
如何使用 one 中的 latest version 更新 masters 表的 每条记录命令?我想覆盖 name 和 added_at 列的值。请注意,versions 表中的其他列在 masters 表中不存在,例如 notes。
是否可以使用 JOIN 完成更新,以便在较大的表上执行得更快?
【问题讨论】:
标签: mysql sql sql-update sqldatetime sql-limit