Обновление соединения с отношением "один ко многим" - PullRequest
0 голосов
/ 07 августа 2020

У меня есть таблица пользователей, которая выглядит так:

ПОЛЬЗОВАТЕЛИ

userid | email | action | actiontimestamp

И еще одна таблица некоторых действий пользователя (вход, выход и т. Д. c.), Который выглядит так:

USER_ACTIONS

actionid | userid | action | actiontimestamp

Мне нужно иметь возможность обновлять действия таблицы USERS и значения actiontimestamp с помощью одного запроса, где он использует последнюю строку из таблицы USER_ACTIONS. Возможно ли это?

1 Ответ

0 голосов
/ 07 августа 2020
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+. Для более старых версий используйте UPDATE с одной таблицей с двумя коррелированными запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...