从另一个表更新JOIN并获取最新信息

时间:2014-03-17 01:21:16

标签: mysql sql

我有一个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

3 个答案:

答案 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

希望得到这个帮助。