Как правильно составить SQL запрос в данном случае?

У меня есть 3 таблицы: messages (в ней хранится информация о том, кто отправил сообщение, текст сообщения и дата), dialogues (в ней хранится информация о двух пользователях, которые находятся в диалоге и ID последнего сообщения в этом диалоге), users (в ней хранится имя пользователя и остальные данные). Мне необходимо получить такой результат одним запросом: в таблице dialogues я получаю ID получателя сообщения (записываю его в first_user) и получаю ID последнего сообщения в этом диалоге, после этого мне нужно получить имя получателя сообщения по ID из таблицы users, после этого мне нужно получить текст сообщения и дату сообщения по ID последнего сообщения из таблицы messages.

Тут я получаю ID последнего сообщения в нужном мне диалоге и ID получателя сообщения, которое записывается в first_user

SELECT last_message,
   CASE WHEN first_user=1 THEN second_user
        WHEN second_user=1 THEN first_user
        ELSE first_user
   END
FROM dialogues;

По итогу у меня должна получится такая таблица/ответ: username (имя пользователя из таблицы users), content (текст сообщения из таблицы messages), date (дата сообщения из таблицы messages).

Сразу хочу извиниться за то, что я где-то объяснил непонятно. Я сейчас максимально сонный и мозг уже не варит. Всем заранее спасибо!


Ответы (1 шт):

Автор решения: HackerU

messages

message_id, user_id, text, timestamp

dialogues

user_id_1, user_id_2, last_message_id

users

user_id, name, lastname, age

select 
    d.user_id_2 as first_user,
    d.last_message_id,
    u.name,
    m.text
    m.timestamp
from dialogues as d
left join users as u
on d.user_id_2 = u.user_id
left join messages as m
on d.last_message_id = m.message_id
→ Ссылка