У меня следующий запрос, объединяющий две таблицы, которые содержат теги, связанные с двумя отдельными объектами: cat и dog.Я пытаюсь создать таблицу, в которой перечислены теги и количество их появления в двух таблицах.Это нормализованная система тегов, поэтому в таблицах cat_tags и dog_tags указаны только идентификаторы тегов, и поэтому я делаю еще одно INNER JOIN для получения фактического значения тега.
SELECT x.tag_id, (COUNT(y.tag_id) + COUNT(z.tag_id)) AS num, tag_name AS tag
FROM (SELECT dt.tag_id FROM dog_tags dt UNION SELECT st.tag_id FROM cat_tags st) x
LEFT JOIN dog_tags y ON y.tag_id = x.tag_id
LEFT JOIN cat_tags z ON z.tag_id = x.tag_id
INNER JOIN tags t ON x.tag_id = t.tag_id
GROUP BY x.tag_id ORDER BY num DESC LIMIT 0,100
Проблема в том, чточисла num не верны для тегов, которые появляются несколько раз в двух таблицах.Например, идентификатор тега номер 5 («ошейник») появляется дважды в cat_tags и дважды в dog_tags, однако в приведенном выше запросе общее число равно 8 вместо 4. Другой тег, который появляется три раза, получается как 6. Что-то умножает их на2. Что это?