Я хочу предисловие к этому, сказав, что я пробовал несколько разных методов, используя JOIN, where clauses и UNION, и я не могу понять, что происходит не так, поскольку эти запросы слишком долго выполняются. У меня есть два относительно простых запроса, которые я хочу объединить в один запрос.
Первый запрос:
select count(distinct id) as hits, name, weapon
from damage
group by name, weapon
order by name, weapon desc;
Второй запрос:
select count(distinct id) as shots, name, weapon
from attack
where category='Weapon'
group by name, weapon
order by name, weapon desc;
Оба запроса создают таблицу результатов с несколькими сотнями строк. Я хотел бы иметь выходную таблицу, которая показывает снимки, хиты, имя и оружие, где они пересекаются. Проблема в том, что каждый способ, которым я занимаюсь, попадает на мой тайм-аут сервера 30-х, тогда как отдельные запросы занимают долей секунды, чтобы закончить, поэтому я не понимаю, что я на самом деле делаю неправильно.
Спасибо за любую помощь, которая может быть предоставлена - mysql - это хобби для меня, поэтому я ценю, что любые эксперты тратят свое время, чтобы помочь мне учиться.
Используйте UNION
в подзапросе, а затем группируйте их в основной запрос. В объединении вы используете фиктивные значения для столбца, который поступает из другой таблицы.
SELECT name, weapon, MAX(hits) AS hits, MAX(shots) AS shots
FROM (
select count(distinct id) as hits, 0 AS shots, name, weapon from damage group by name, weapon
UNION ALL
select 0 AS hits, count(distinct id) as shots, name, weapon from attack where category='Weapon' group by name, weapon
) AS x
GROUP BY name, weapon
ORDER BY name, weapon DESC