我有一个user
表,与log
表有一对多的关系。
基本上,每次更新用户记录时,都会在日志表中插入一条记录。
现在我要做的是使用最新的日志条目更新用户表,将其当前状态和备注字段设置为最近记录的日期。
日志
id
user_id
状态
备注
日期时间用户
ID
状态
笔记
以下Query几乎可以工作,除了它获取日志表中的第一个条目。
UPDATE user u
INNER JOIN log l
ON u.user_id = l.user_id
SET u.`status` = l.`status`, u.notes = l.notes
我希望它最新,基于datetime
字段或只是最大id
答案 0 :(得分:0)
您需要手动查找最后一条记录。执行此操作的好方法是not exists
:
UPDATE user u INNER JOIN
log l
ON u.user_id = l.user_id
SET u.`status` = l.`status`, u.notes = l.notes
WHERE not exists (select 1
from log l2
where l2.user_id = l.user_id and
l2.datetime > l.datetime
);
这适用于log(user_id, datetime)
上的索引。
答案 1 :(得分:0)
在UPDATE语句的WHERE子句中选择MAX(id),如下所示:
UPDATE
u
SET
u.status = l.status,
u.notes = l.notes
FROM
user u
INNER JOIN log l ON u.user_id = l.user_id
WHERE
l.id = (
SELECT
MAX(id)
FROM
log
WHERE
user_id = u.user_id);
答案 2 :(得分:0)
试试这个:
UPDATE user u INNER JOIN log l INNER JOIN
(SELECT MAX(id) Last_id FROM log GROUP BY user_id) u on u.Last_id=l.id
on l.user_id=u.user_id
SET u.`status` = l.`status`, u.notes = l.notes
希望得到这个帮助。