我正在寻找解决方案:
SELECT SUM(`quant`), MONTH(`date`) AS month, `id` from (
(SELECT `date`, `id`, count(`hit`) AS `quant ` FROM `stat_2014_07` WHERE `k_id` = '123')
UNION ALL
(SELECT `date`, `id`, count(`hit`) AS `quant ` FROM `stat_2014_08` WHERE `k_id ` = '123')
) group by id, month
MySQL:每个派生表都必须有自己的别名
答案 0 :(得分:11)
错误消息的确切含义。在您的(简化)查询中:
SELECT SUM(`quant`), MONTH(`date`) AS month, `id`
from (
... inner select
)
group by id, month;
您没有为派生表指定别名。所以它应该是:
SELECT SUM(`quant`), MONTH(`date`) AS month, `id`
from (
... inner select
) as t -- this is the change
group by id, month;
顺便说一句:联盟选择部分周围的括号完全没用。为清晰起见,我建议删除它们:
SELECT SUM(`quant`), MONTH(`date`) AS month, `id`
from (
SELECT `date`, `id`, count(`hit`) AS `quant ` FROM `stat_2014_07` WHERE `k_id` = '123'
UNION ALL
SELECT `date`, `id`, count(`hit`) AS `quant ` FROM `stat_2014_08` WHERE `k_id ` = '123'
) as t -- this is the change
group by id, month;
答案 1 :(得分:9)
您需要为查询提供别名:
SELECT SUM(`quant`), MONTH(`date`) AS month, `id`
FROM ((SELECT `date`, `id`, count(`hit`) AS `quant`
FROM `stat_2014_07`
WHERE `k_id` = '123') t1
UNION ALL
(SELECT `date`, `id`, count(`hit`) AS `quant`
FROM `stat_2014_08`
WHERE `k_id ` = '123') t2
) t_union
GROUP BY id, month