Объединяя два запроса в MySQL - PullRequest
0 голосов
/ 21 мая 2018

Я хочу предвосхитить это, сказав, что я пробовал несколько различных методов, используя JOIN, where, и 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 для меня хобби, поэтому я благодарен всем экспертам, которые нашли время, чтобы помочь мне учиться.

1 Ответ

0 голосов
/ 21 мая 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...