@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).

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

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

Похожие вопросы