Я хочу объединить несколько таблиц со следующей структурой:
Users (userId, name)
Emoticons (emoticonId, name)
UnlockedEmoticons (userId, emoticonId, name)
Для каждого элемента я хочу показать, разблокирован ли определенный смайлик пользователем, например:
1(emoticonId), emoticonA(name), unlocked (userId IS NOT NULL) AS has?,
2(emoticonId), emoticonB(name), locked (userId IS NOT NULL) AS has?
Проблема в том, что если в unlockedEmoticons нет userId, я получаю пустые результаты.
SELECT e.*, (ue.id IS NOT NULL) AS `has`
FROM UnlockedEmoticons ue RIGHT JOIN emoticons e ON ue.emoticonId = e.emoticonId
LEFT JOIN users u ON u.id = ue.userId
WHERE uk.userId = 33
Я попытался изменить порядок операторов соединения, но безуспешно. Есть ли способ добиться этого?
Я использую mysql 5.7






Уловка состоит в том, чтобы включить AND после операторов ON:
FROM UnlockedEmoticons ue RIGHT JOIN emoticons e ON ue.emoticonId = e.emoticonId AND ue.userId = #{userId}
и удалите операторы WHERE. :)