@IzeBerg

Как правильно составить SQL-запрос с JOIN?

Есть запрос (выполняется в процедуре, предаются параметры: send_to, time_from, out_limit):
SELECT 
msgs.text, 
msgs.time, 
users.nickname,
roles.nickname_color,
roles.message_color
FROM msgs 
JOIN users
ON users.account_id=msgs.user_id 
JOIN roles 
ON users.role_id=roles.role_id 
WHERE msgs.send_to=send_to AND msgs.time>time_from
LIMIT out_limit

Некоторые строки из таблицы msgs игнорирует, по пробовал так:

SELECT 
msgs.text, 
msgs.time, 
users.nickname,
roles.nickname_color,
roles.message_color
FROM msgs 
JOIN users
ON users.account_id=msgs.user_id 
FULL OUTER JOIN roles 
ON users.role_id=roles.role_id 
WHERE msgs.send_to=send_to AND msgs.time>time_from
LIMIT out_limit


Ошибка синтаксиса на "FULL OUTER JOIN users...".

Мне нужно чтобы выводились ВСЕ строки из msgs, которые удовлетворяют условию:
msgs.send_to=send_to AND msgs.time>time_from

И обязательным добавлением данных из таблицы users (если нет совпадений users.account_id с msgs.user_id - игнорировать) и не обязательным из roles (если нет совпадения users.role_id с roles.role_id, то оставить NULL в выбранных полях из roles).

Что я делаю не так?
  • Вопрос задан
  • 2345 просмотров
Решения вопроса 1
thewind
@thewind
php программист, front / backend developer
Первый join замените на left join, второй тоже по идее надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы