以一对多关系更新联接

时间:2020-08-07 02:05:27

标签: mysql sql-update database-table

我有一个用户表,如下所示:

用户

userid | email | action | actiontimestamp

还有一些用户操作(登录,注销等)的另一个表,如下所示:

USER_ACTIONS

actionid | userid | action | actiontimestamp

我需要能够使用单个查询来更新USERS表的action和actiontimestamp值,其中它使用USER_ACTIONS表中的最新行。这可能吗?

1 个答案:

答案 0 :(得分:0)

UPDATE users u
  JOIN ( SELECT DISTINCT
                userid, 
                FIRST_VALUE(action) OVER (PARTITION BY userid ORDER BY actiontimestamp DESC) action,
                MAX(actiontimestamp) OVER (PARTITION BY userid) actiontimestamp 
        ) ua USING (userid)
SET u.action = ua.action,
    u.actiontimestamp = ua.actiontimestamp 

PS。需要版本8+。对于更古老的版本,请使用具有2个相关查询的单表UPDATE。