Объединяя два запроса в MySQL

0

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

  • 0
    См. Meta.stackoverflow.com/questions/333952/… . Между прочим, хотя у меня нет точных данных, мой инстинкт состоит в том, что подавляющее большинство участников под этим тегом являются любителями.
Теги:
join

1 ответ

0
Лучший ответ

Используйте 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
  • 0
    Спасибо за ответ! Я бы никогда не подумал сделать это так. Запрос быстрый, но возвращает 0 в столбце снимков. Я немного поэкспериментирую с этим и посмотрю, смогу ли я заставить его вернуть правильные числа, если вы не увидите очевидного исправления.
  • 0
    Заменить 0 в первой строке на MAX (кадры)?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню