Первая проблема заключается в том, что выбираются не все строки из таблицы classification
, а только те, которые имеют соответствующие записи в двух других таблицах.Это потому, что вы поставили некоторые условия, которые зависят от записей в этих таблицах, в предложении WHERE.По сути, вы делаете LEFT JOIN для решения именно этой проблемы, но подрываете это, помещая условия в WHERE, а не в LEFT JOIN ... ON.
Вторая проблема заключается в том, что вы подсчитываете числоклассификации, а вы на самом деле хотите количество билетов, верно?Поэтому измените count(c.id)
на count(t.id)
, чтобы получить правильные числа.
SELECT c.id, c.description, count(t.id)
FROM classification c
LEFT JOIN ticket t on t.classification_id = c.id
LEFT JOIN ticket_history th on th.ticket_num = t.id
AND th.employee = '456'
AND th.from_state = '2' AND th.to_state = '3'
GROUP BY c.id
ORDER BY c.id;