Я пытаюсь сделать довольно сложный (для меня, по крайней мере) запрос, который включает в себя выборку строк, которые могут иметь значения NULL
.MySQL JOINs с NULL значениями
Здесь четыре стола, tags
, questions_tags
, users_experience
и answers
. Соединения довольно просты. Вопросы отмечены, теги имеют имена, пользователи дают ответы на вопросы, а пользователи имеют опыт работы с определенными тегами. Я хочу найти ответы, которые дали пользователи, и их опыт (который может быть NULL
) для тегов вопросов. Я заказываю по количеству ответов, заданных для определенного тега.
Мой запрос заключается в следующем. Это вовсе не оптимизированы (а если у вас есть предложения по оптимизации, пожалуйста, предложите прочь!):
SELECT t.tag_id, t.name, ue.body, COUNT(a.qid)
FROM tags AS t
LEFT JOIN users_experience AS ue
ON t.tag_id = ue.tag_id
LEFT JOIN questions_tags AS qt
ON qt.tag_id = t.tag_id
LEFT JOIN answers AS a
ON a.qid = qt.qid
WHERE a.uid=1
GROUP BY t.tag_id
ORDER BY COUNT(a.qid) DESC;
Проблема я столкнулся с вышеупомянутым запросом является то, что если кто-нибудь отметил опыт для конкретного тега , который покажет пользователю, является ли это их опытом или нет. Я бы хотел увидеть только тот опыт конкретного пользователя, который этот запрос просто не делает. Я столкнулся с этой проблемой в другом месте и был в тупике, поэтому пришлось ее взломать.
Я попытался добавить AND ue.uid = 1
к запросу, но это ограничит результаты только теми, где опыт уже предоставлен, и не возвращать значения NULL
, которые я желаю.
Любые мысли о том, что делать?
Awesome, спасибо! –