2015-03-07 4 views
0

Используя MySQL, у меня есть несколько таблиц DB, которые содержат одинаковые имена структуры/столбца, но разные данные. Я могу получить все необходимые данные из Таблицы 1 с помощью следующего запроса:Как объединить эти SQL-запросы, чтобы дать мне один результат?

SELECT heading, COUNT(*) AS number FROM TABLE1 
WHERE category = 'PARENT' 
GROUP BY heading ORDER BY number DESC 

я могу получить все необходимые данные из Таблицы 2 с этим:

SELECT heading, COUNT(*) AS number FROM TABLE2 
WHERE category = 'PARENT' 
GROUP BY heading ORDER BY number DESC 

Это несет на , с ТАБЛИЦА 3, ТАБЛИЦА 4 и т. д.

Как объединить запросы, чтобы у меня было 1 запрос и один результат? Вместо отдельного результата для каждой таблицы?

Я попытался размещения UNION между запросами, но это не дает мне результат, я хочу ...

+0

Что с 'UNION'? – Trinimon

+0

«Объединение» действительно горизонтально объединяет результаты запросов 2+, поскольку они имеют одинаковое количество столбцов одного и того же типа. Объясните, как это не дает вам результат, который вы хотите. В качестве FYI «union», в отличие от «union all», будет отбрасывать дубликаты, если бы какая-либо таблица имела одинаковое значение курса и тот же счетчик. –

+0

Проблема с объединением заключается в том, что неясно, где можно группировать. Нужно ли вам объединять все, а затем группировать и считать, или вам нужно группировать и подсчитывать каждую таблицу, а затем объединение? –

ответ

1

«Союз» Все ваши запросы, но поставить весь запрос в подзапрос. Тогда сделайте это:

Select heading 
,   sum(number) 
from ([your queries with union all]) 
group by heading 
1

Вы можете выбрать из UNION и GROUP и ORDER на его результат:

SELECT heading, COUNT(*) AS number 
    FROM (SELECT heading FROM TABLE1 
     WHERE category = 'PARENT' 
     UNION -- or UNION ALL - see comment below 
     SELECT heading FROM TABLE2 
     WHERE category = 'PARENT') 
GROUP BY heading ORDER BY number DESC; 

P.S. Предполагается, что вы хотите подсчитать и сгруппировать все строки, кроме TABLE2, которые уже находятся в TABLE1. Используйте UNION ALL в приведенном выше фрагменте, если вы хотите также считать дублеты.

Альтернативно (в соответствии с добавленным комментарием выше):

SELECT heading, SUM(number) AS number 
    FROM (SELECT heading, COUNT(*) AS number FROM TABLE1 
     WHERE category = 'PARENT' 
     UNION -- or UNION ALL - see comment below 
     SELECT heading, COUNT(*) AS number FROM TABLE2 
     WHERE category = 'PARENT') 
GROUP BY heading ORDER BY number DESC; 
+0

# 1248 - Каждая производная таблица должна иметь свой собственный псевдоним? – Metzed

+0

Ничего страшного, не в этом случае. Ошибка копирования и вставки. Если имена столбцов равны, вы можете опустить предложение 'AS ... '. Будет исправлено заявление выше ... – Trinimon

Смежные вопросы