Простой SQL-запрос для выбора данных сразу из двух таблиц

У меня есть две таблицы для моего приложения чата в узле js.

ТАБЛИЦА пользователи :

      - id (PK, AI)
      - username
      - useremail
      - userpass

ТАБЛИЦА сообщений :

      - mess_id (PK, AI)
      - mess_to (FK - users.id)
      - mess_from (FK - users.id)
      - mess_txt 
      - timestamp

Когда пользователь входит в систему, я хочу получить ИМЯ ПОЛЬЗОВАТЕЛЕЙ тех людей, которые отправляли сообщения текущим пользователям и которым текущий пользователь отправлял сообщения.

Запрос, который я пробовал до сих пор

SELECT username FROM users JOIN messages ON users.id = messages.mess_to OR users.id = messages.mess_from WHERE users.id = 1

Приведенный выше запрос возвращает имя пользователя текущего пользователя из каждого поля, где он отправлял сообщения или получал сообщения, и я хочу получить имена пользователей, которые отправили ему сообщения и которые получили сообщения от этого пользователя.


person Nadeem    schedule 22.10.2017    source источник


Ответы (1)


Я бы использовал подзапрос UNION, чтобы получить идентификаторы пользователей, которые разговаривали с текущим пользователем. Затем присоедините его к таблице users.

select u.*
from (
    select mess_to as user_id from messages where mess_from = 1
    union
    select mess_from as user_id from messages where mess_to = 1
) sub
join users u on u.id = sub.user_id
person Paul Spiegel    schedule 22.10.2017