Mysql объединить несколько таблиц при заполнении левой стороны и проверить, если определенная строка НЕ NULL

0

Я хочу объединить несколько таблиц со следующей структурой:

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

Теги:

1 ответ

0

Трюк состоит в том, чтобы включить AND после операторов ON:

FROM UnlockedEmoticons ue RIGHT JOIN emoticons e ON ue.emoticonId = e.emoticonId AND ue.userId = #{userId}

и удалить инструкции WHERE. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню